У меня проблемы с моим Regex
Я сделал собственный BBcode для своего веб-сайта, однако я также хочу, чтобы URL-адреса также анализировались.
Я использую preg_replace, и это шаблон, используемый для идентификации URLS:
/([\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/is
Это работает отлично, однако, если URL-адрес находится в блоке [img] [/ img], вышеупомянутый шаблон также отображает его и создает такой результат:
//[img]http://url.com/toimg.jeg[/img] will produce this result: <img src="<a href="http://url.com/toimg.jeg" target="_blank">/> //When it should produce: <img src="http://url.com/toimg.jeg"/>
Я попытался использовать это:
/([^"][\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/][^"])/is
Без везения.
Любая помощь будет оценена.
Изменить: для решения. См. Второй комментарий к ответу stema.
Попробуй это
(?<!href=")(\b[\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])
См. Здесь, в Regexr
Чтобы сделать его более общим, вы можете упростить свой lookbehind, чтобы проверить только на «=» "
(?<!=")(\b[\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])
См. Его в Regexr
(?<!href=")
является отрицательным утверждением lookbehind, оно гарантирует, что перед вашим шаблоном не будет« href = ».
\b
– это граница слова, которая привязывает начало вашей ссылки к изменению от несловного символа слова. без этого lookbehind будет бесполезным, и это будет соответствовать «ttp: // …» on.