Мне нужно сделать такой URL:
https://www.domain.com/m/281/[imagename].jpg
и превратите это в это:
http://img.ruphp.com/php/[imagename].jpg
Мне нужно будет сделать это во многих URL-адресах, поэтому я хочу написать быстрый скрипт php для размещения URL-адресов в массиве, а затем цикл для изменения имени домена и удаления структуры файла в исходных URL-адресах. Не все оригинальные URL-адреса /m/281
немного отличаются.
Я думал, что могу сделать str_replace
для https://www.domain.com
по http://www.NEWdomain.com
, но я смущен тем, как изменить изменяющийся /m/281/
в URL-адресе на мой файл структура как /images/
.
Будет ли регулярное выражение лучше всего решить эту проблему?
Если вы хотите изменить все URL-адреса изображений со всех путей, эта проверенная функция должна сделать трюк.
function fixurls($text) { $re = '% # Match image urls in domain.com https://www\.domain\.com/ # Required domain. (?:[^\s/]+/)* # Optional pathname. ([^\s/]+\.jpe?g|png|gif) # $1: Filename (images only) \b # Anchor to word boundary. %xim'; // Fix all image URLs in $text string. $replace = 'http://www.NEWdomain.com/images/$1'; $text = preg_replace($re, $replace, $text); return $text; }
Вы можете легко изменить часть пути регулярного выражения, если хотите изменить изображения только с определенных путей.
вы можете попробовать что-то вроде:
explode("/", $urlString);
результатом будет:
$arr[0] = www.NEWdomain.com $arr[1] = [imagename].jpg
затем просто вставьте перед последним элементом «изображения»,
результатом будет:
$arr[0] = www.NEWdomain.com $arr[1] = images $arr[2] = [imagename].jpg
наконец, взорвать его обратно в строку:
$blah = implode("/", $arr);
Почему бы вам не попробовать использовать некоторую библиотеку синтаксического анализа URL, например – parse_url
а затем получить каждый компонент и, возможно, упростить замену строки.
Ваше регулярное выражение могло бы соответствовать /[a-zA-Z]/[0-9]*/
, если бы я не /[a-zA-Z]/[0-9]*/
отношении вашего старого шаблона.
Я думаю, что вам нужно preg_replace()
.
Если переменными являются только первые два подкаталога, вы можете попробовать:
$src = preg_replace( "~https?://www.domain.com/\w+/\d+/(.*?\.jpg)~" // match regex "http://www.NEWdomain.com/images/$1", // replacement $src);
\w
означает букву, а \d+
соответствует десятичным знакам. .*?
работает практически на всех, так как вы не дали никаких критериев для имени файла.
В заменяющей строке $1
просто становится тем, что было ранее сопоставлено с (
захватом )
parens.