я пытаюсь использовать preg_replace
на URL к изображению в формате HTML и превратить его в BBCode.
От: <img src="http://website.com/char/sign/Name+Surname.png">
Для того, чтобы: [sign]Name+Surname[/sign]
Примечание: имя файла png может быть просто Name
, он может содержать отчество, например: Name+Middlename+Surname
также может содержать -
а также %2527
лайк Carl-Philips
или же Bob+Mc%2527Donalds
Так что это то, что я пробовал до сих пор, но он ничего не делает. Что я делаю неправильно?
$source = array(
'#\<img src=\"http\:\/\/website.com\/char\/sign\/\>(.+).png\>#isU'
);
$new = array(
'[sign]$1[/sign]'
);
$text = preg_replace($source, $new, $text);
Вы должны использовать парсер (Как вы анализируете и обрабатываете HTML / XML в PHP?) за это в будущем. У вас есть несколько опечаток в вашем регулярном выражении.
Это должно выполнить то, что вы после:
/<img src="http:\/\/website\.com\/char\/sign\/(.+?)\.png">/
Демо (с объяснением регулярных выражений): https://regex101.com/r/sT6aG9/1
Пример PHP:
$source = '/<img src="http:\/\/website\.com\/char\/sign\/(.+?)\.png">/';
$new = '[sign]$1[/sign]';
$text = '<img src="http://website.com/char/sign/Name+Surname.png">, <img src="http://website.com/char/sign/Bob-Robinson.png">, <img src="http://website.com/char/sign/Michael%2527Ross.png">';
$text = preg_replace($source, $new, $text);
echo $text;
Выход:
[sign]Name+Surname[/sign], [sign]Bob-Robinson[/sign], [sign]Michael%2527Ross[/sign]
PHP Demo: http://3v4l.org/WC5oJ
Других решений пока нет …