2013-10-05 98 views
0

從wiki標記語言頁面的混合鏈接我要檢查以下類型的字符串:正則表達式來獲得Java的

has [[public transport]]ation in city? some[[times]]

,並只返回相關的部分 - 即

[[public transport]]ation some[[times]]

我用這正則表達式:\\w*?\\[\\[(.*?)\\]\\]\\w*?

當搜索文本中包含新行和特殊字符時,它似乎不適用於上面給出的示例和擴展示例。你能指出我應該如何寫正則表達式嗎?

回答

1

默認.不會匹配換行符:

你需要切換單在線模式

(?s)\\S*\\[\\[.*?\\]\\]\\S* 
^ 

使用單線模式,.也將匹配換行符

0

你可以使用這個表達式與DOTALL開關(?s)

(?s)\\S*\\[\\[.*?\\]\\]\\S* 

System.out.println("has [[public transport]]ation in city? some[[times]]".replaceAll(
    "(?s)\\S*\\[\\[.*?\\]\\]\\S*", "<$0>")); 

OUTPUT:

has <[[public transport]]ation> in city? <some[[times]]> 
+0

是什麼' 「<$0>」'怎麼辦?空的空間? – Angad

+0

'$ 0'表示匹配的字符串,我使用''<$0>「'向你展示這個匹配的工作示例。 – anubhava