2012-03-05 2 views
1

У меня есть регулярное выражение, соответствующее URL-адресам и преобразующее их в html-ссылки. Если URL-адрес уже является частью ссылки, я не хочу, чтобы соответствовать, например:Regex match if not after word

http://stackoverflow.com/questions/ask 

должны соответствовать, но:

<a href="http://stackoverflow.com/questions/ask">Stackoverflow</a> 

Если не соответствует

Как могу ли я создать регулярное выражение для этого?

+0

Не могли бы вы опубликовать некоторые строки входной строки? Второй случай не должен совпадать, потому что он является частью привязанного тега или потому, что он уже сопоставлен? –

+0

Опишите, что должно соответствовать. Чтобы работать с регулярными выражениями, вы должны быть настолько строгими, насколько сможете. Эд: возможно,^и $ будут выполнять эту работу. –

+0

Возможный дубликат [Regex игнорировать URL уже в HTML-тегах] (http://stackoverflow.com/questions/9567836/regex-ignore-url-already-in-html-tags) – stema

ответ

2

Если URL соответствия регулярного выражения это $URL, то вы можете использовать следующий шаблон

(?<!href[\"'])$URL 

В PHP вы написать

preg_match("/(?<!href[\"'])$URL/", $text, $matches); 
1

Вы можете использовать отрицательный 'назад, чтобы утверждать, что URL не предшествует href="

(?<!href=") 

(Ваш URL-шаблон должен идти сразу после этого.)

0

Этот link содержит информацию. Принятое решение выглядит так:

<a\s 
     (?:(?!href=|target=|>).)* 
     href="http:// 
     (?:(?!target=|>).)* 

Удаляя ссылки на «цель», это должно сработать для вас.

0

Попробуйте

/(?:(([^">']+|^)https?\:\/\/[^\s]+))/m