如何防止正则表达式转换bbcode超链接?

时间:2012-02-08 06:11:48

标签: java regex

我有一个正则表达式,它将解析消息的内容并将纯文本超链接转换为HTML超链接。

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

转换http或https超链接时很好。

问题是我还在bbcode标签中包含了其他超链接,我不希望将正则表达式转换为HTML超链接。

E.g。 [IMG]http://www.google.com/img.png[/IMG][YOUTUBE]http://www.youtube.com[/YOUTUBE]

如何更改正则表达式以防止正则表达式转换bbcode超链接?

2 个答案:

答案 0 :(得分:3)

你可以使用负面的外观。

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

(?<!\])只允许其余的网址格式匹配,如果它不会紧跟']'

答案 1 :(得分:0)

我建议使用这样的负面预测来避免匹配bbcode链接:

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