Замена всех типов ссылок изображений BBCODE на ссылки изображений HTML - PullRequest
0 голосов
/ 07 июля 2019

У меня есть этот скрипт для замены тегов изображений BBCODE на теги HTML

$text = "[img]https://somelink/2/3/pic.jpg[/img]
[img]https://somelink/2/3/pic.jpg[/img]
[img]https://somelink/2/3/pic.jpg[/img]";

echo preg_replace(
'~\[img\](https?://.*?\.(?:jpg|jpeg|gif|png|bmp))\[/img\]~s',
'<img src="$1" alt="" />',
$text);

Это разветвляет ссылки, которые заканчиваются некоторыми из указанных расширений: .jpg .jpeg ...

Но если ссылка похожа на: [img]https://somelink/2/3/pic.jpg? W = bla [/img]

Тогда этот шаблон регулярного выражения завершится неудачей.

Какой шаблон будет подходящим для всехтип ссылок на изображения?Я пытался:

~\[img\](https?://.*?\.(?:jpg|jpeg|gif|png|bmp).*)\[/img\]~Us

Но это также не работает

Ответы [ 2 ]

1 голос
/ 07 июля 2019

Если возможно, что параметры строки запроса также могут содержать [ или ], вы можете сопоставить вопросительный знак \? с последующим сопоставлением до тех пор, пока не встретите [/img] и использовать квантификатор-собственник для предотвращения ненужных возвратов

Пояснение

\[img\](https?://.*?\.(?:jpe?g|gif|png|bmp)(?:\?(?:[^[]++|\[(?!/img\]))*+)?)\[/img]
  • \[img\] Матч [img]
  • ( Захватывающая группа
    • https?://.*? Соответствует http с необязательным s, :// и 0+ раз любым символом, не жадным
    • \.(?:jpe?g|gif|png|bmp) Совпадение с точкой и любым из перечисленных вариантов
    • (?: Группа без захвата
      • \? Совпадение?
      • (?:[^[]++|\[(?!/img\]))*+ Повторите 0+ раз, не сопоставляя [ или не сопоставив [, если то, что прямо справа, не равно /img]
    • )? Закрыть группу без захвата и сделать ее необязательной
  • ) Закрыть группу захвата
  • \[/img] Совпадение [/img]

Regex demo

1 голос
/ 07 июля 2019

Вы можете использовать

\[img\](https?://.*?\.(?:jpe?g|gif|png|bmp).*?)\[/img\]
  • \[img\] - совпадения [img]
  • (https?://.*?\.(?:jpe?g|gif|png|bmp).*?) - совпадения URL-адреса, содержащего любое из вышеуказанных расширений
  • \[/img\] - Совпадения [/img]

Демо

Вы можете визуализировать регулярное выражение здесь

Примечание: - какВы используете U флаг, который вы можете безопасно удалить ? после квантификаторов, т.е.

\[img\](https?://.*\.(?:jpe?g|gif|png|bmp).*)\[/img\]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...