2016-06-11 64 views
0

我有一個問題我有這樣一句話爲例:正則表達式匹配詞,包括點

"HalloAnna daveca.nn dave anna ca. anna" 

而且我只想找到一個匹配的常委會「約」 。

我正則表達式是這樣的:

(?i)\b(ca\.)\b 

但是,這並不工作,我不知道爲什麼。有任何想法嗎 ?

testSource.replaceAll() 

pattern.matcher(testSource).replaceAll(). 

兩個doesn't工作:

//更新

我excecute它。

+0

你如何在java代碼中執行這個正則表達式? –

回答

1

你應該使用這樣的:

Pattern.compile("(?i)\\b(ca\\.)(?=\\W)").matcher(a).replaceAll("SOME TEXT"); 

哪,如果你忽略了Java逃逸給出了一個正則表達式:(?i)\b(ca\.)\W

在正常的正則表達式中,每個\都必須在java中跳過 - \\

此外,在一個單詞之前你有單詞邊界(\b),但它只適用於字符串中的一個部分,其中你有一個從空白到字母數字字符或其他方式的變化。但在你的情況下,你有一個點,這不是一個字母數字字符,所以你不能在最後使用\b。你可以使用\W這意味着一個非單詞字符是在點之後。但要使用\W,您需要在捕獲組中忽略它(因此它不會被替換) - (?=

的另一個問題是,你使用的.,其中的任何字符相匹配,但實際上你要匹配的實際點,所以要做到這一點,你必須逃脫它 - \.,這在Java字符串變成\\.

+0

這完美的作品!但我不明白非字邊界是什麼意思?你能解釋\ b和\ B之間的區別嗎? – Montezuma

2

您必須逃脫點,並斷言非單詞以下:

(?i)\bca\.(?=\W) 

live demo