Как я могу преобразовать URL-адреса в синтаксис Markdown, но НЕ мешать URL-адресам, уже имеющим синтаксис Markdown? - PullRequest
3 голосов
/ 27 марта 2009

Система, которую я пишу, использует Markdown для изменения ссылок, но я также хочу сделать простые ссылки активными, чтобы ввод http://www.google.com стал активной ссылкой. Для этого я использую замену регулярных выражений, чтобы найти URL-адреса и переписать их в синтаксисе Markdown. Проблема в том, что я не могу заставить регулярное выражение не анализировать ссылки уже в синтаксисе Markdown.

Я использую следующий код:

$value = preg_replace('@((?!\()https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@', '[$1]($1)', $value);

Это хорошо работает для простых ссылок, таких как http://www.google.com, но мне нужно, чтобы игнорировать ссылки уже в формате Markdown. Я думал, что раздел (?! () Будет препятствовать тому, чтобы это совпало с URL, которые следуют за круглыми скобками, но казалось бы, что я ошибаюсь.

Я понимаю, что даже это не идеальное решение (если оно сработало), но это выходит за рамки моих возможностей регулярных выражений.

Ответы [ 2 ]

1 голос
/ 27 марта 2009

Я думаю (?<!\() это то, что вы имели в виду. Если позиция совпадения находится в начале http://www.google.com, проверять нужно не символ следующий , а предыдущий . Другими словами, вам нужен отрицательный взгляд позади , а не отрицательный взгляд вперед .

0 голосов
/ 27 марта 2009

регулярные выражения плохо зарекомендовали себя в подобных вещах, вы можете столкнуться со всевозможными хитрыми html-эксплойтами, о которых вы никогда не могли и подумать. IMO, вы должны изменить скрипт уценки, чтобы помечать URL-адреса уценки так, как он их видит, так что вы можете игнорировать помеченные URL-адреса, когда вы найдете их все с очень очень простым поиском, который не оставляет сложности для взлома.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...