Регулярно игнорировать URL в тегах HTML - PullRequest
4 голосов
/ 05 марта 2012

У меня небольшая проблема с моим Regex

Я создал собственный BB-код для своего веб-сайта, однако я также хочу, чтобы URL-адреса также анализировались.

Я использую preg_replace, и этот шаблон используется для идентификации URL:

/([\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

Без удачи.

Любая помощь будет оценена.

Edit: Для решения см. 2-й комментарий к ответу Stema.

1 Ответ

2 голосов
/ 05 марта 2012

Попробуйте это

(?<!href=")(\b[\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])

См. здесь на Regexr

Чтобы сделать его более общим, вы можете упростить свой внешний вид, чтобы проверять только "=" "

(?<!=")(\b[\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])

См. это в Regexr

(?<!href=") является отрицательным взглядом за утверждением, он гарантирует, что перед вашим шаблоном не будет "href =" ".

\b - это граница слова, которая привязывает начало вашей ссылки к переходу от несловесного символа слова. без этого внешний вид был бы бесполезен и совпадал бы с "ttp: // ...".

...