2012-02-08 123 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>");