У меня есть некоторые BB-коды изображений, подобные этому

[IMG]imageurlhere[/IMG]

[IMG alt="image alt here"]imageurl[/IMG]

[IMG alt="image alt here" title="image title"]imageurl[/IMG]

Я использовал это, чтобы получить URL-адрес изображения

preg_match_all('/\[(img|IMG)\]\s*(https?:\/\/([^*\r\n]+|[a-z0-9\/\\\._\- !]+))\[\/(img|IMG)\]/Ui', $stringContainBbCode, $matches);
$urls = $matches[0];

Но я могу получить URL-адрес изображения только в первом случае. Как мне поступить с двумя оставшимися случаями?

php
0
MCN 10 Ноя 2019 в 10:00

1 ответ

Вы можете использовать блок ()? для проверки дополнительного содержимого, такого как "s" в "https", которое вы проверяете с помощью s?. Используйте его, чтобы проверить, присутствует ли атрибут alt или нет. Регулярное выражение будет примерно таким:

/\[(img|IMG)(\s+alt="(?P<alt>[^"]+)")?(\s+title="(?P<title>[^"]+)")?\]\s*(https?:\/\/([^*\r\n]+|[a-z0-9\/\\\._\- !]+))\[\/(img|IMG)\]/Ui

Обратите внимание, что в этом регулярном выражении атрибут «alt» должен быть перед атрибутом «title», если они оба присутствуют.

0
Progman 10 Ноя 2019 в 14:04