2012-02-08 129 views
1

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

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超链接?

回答

3

您可以使用负向后视。

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

(?<!\])将只允许URL模式的其他部分相匹配,如果不紧跟在']'

0

我会建议使用这样的负先行,以避免匹配的bbcode链接:

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