Будет ли регулярное выражение лучше всего подходит для этой проблемы?

Мне нужно сделать такой 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/ .

Будет ли регулярное выражение лучше всего решить эту проблему?

Related of "Будет ли регулярное выражение лучше всего подходит для этой проблемы?"

Если вы хотите изменить все 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; } 

Вы можете легко изменить часть пути регулярного выражения, если хотите изменить изображения только с определенных путей.

вы можете попробовать что-то вроде:

  1. удалите "https: //"
  2. сделайте str_replace (), как вы сказали в домене
  3. разделите строку на массив на основе «/». explode("/", $urlString);
  4. цикл и удалить любые элементы после элемента URL, но не последние.

результатом будет:

 $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.