PHP - предварительный URL

Я пытаюсь использовать 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);

1 ответ

Решение

Вы должны использовать синтаксический анализатор ( Как вы анализируете и обрабатываете 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: http://3v4l.org/WC5oJ

Другие вопросы по тегам