Как запретить регулярному выражению конвертировать гиперссылки bbcode? - PullRequest
1 голос
/ 08 февраля 2012

У меня есть регулярное выражение, которое будет анализировать содержимое сообщения и преобразовывать гиперссылки в виде простого текста в гиперссылки HTML.

message = message.replaceAll("(?:https?|http?)://[\\w/%.\\-?&=!#]+",
                             "<a href='$0' target='_blank'>$0</a>");

Это нормально при преобразовании гиперссылок http или https.

Проблема в том, что у меня также есть другие гиперссылки, заключенные в теги bbcode, которые я не хочу, чтобы регулярное выражение конвертировалось в гиперссылки HTML.

например. [IMG]http://www.google.com/img.png[/IMG] или [YOUTUBE]http://www.youtube.com[/YOUTUBE]

Как изменить свое регулярное выражение, чтобы запретить регулярному выражению преобразовывать гиперссылки bbcode?

Ответы [ 2 ]

3 голосов
/ 08 февраля 2012

Вы можете использовать отрицательный вид сзади.

"(?<!\])(?:https?|http?)://[\\w/%.\\-?&=!#]+"

(?<!\]) разрешит совпадение только с оставшейся частью шаблона URL, если он не сразу следует за ']'.

0 голосов
/ 08 февраля 2012

Я предлагаю использовать отрицательный взгляд, подобный этому, чтобы избежать совпадения ссылок bbcode:

message = message.replaceAll("(?:https?|http?)://[\\w/%.\\-?&=!#]+(?!.*\\[/)",
                         "<a href='$0' target='_blank'>$0</a>");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...