2014-10-08 21 views
1

我在Java Pattern和Matcher中遇到了問題。我已經包含了一個我想要做的簡單例子。Java Pattern/Matcher找不到分詞

我本來期待模式「。\ b」找到第一個單詞(或例子中的「4」)的最後一個字符,但是當我遍歷代碼時,m.find()總是返回false。我在這裏錯過了什麼?

爲什麼下面的Java代碼總是打印出「Not Found」?

   Pattern p = Pattern.compile(".\b"); 
       Matcher m = p.matcher("102939384 is a word"); 
       int ixEndWord = 0; 
       if (m.find()) { 
        ixEndWord = m.end(); 
        System.out.println("Found: " + ixEndWord); 
       } else { 
        System.out.println("Not Found"); 
       } 
+4

你需要在正則表達式中轉義特殊字符:'「。\\ b」' – AntonH 2014-10-08 20:40:02

+0

我是多麼的愚蠢。 – 2014-10-08 20:47:19

+0

我已經把它作爲一個答案,有點解釋。你可以接受,作爲答案:) – AntonH 2014-10-08 20:48:49

回答

3

你需要在正則表達式特殊字符轉義:".\\b"

基本上,在字符串中的反斜槓來轉義。所以"\\"成爲字符'\'

所以字符串".\\b"成爲字型".\b",它將被模式使用。

0

擴大厄普頓AntonH的評論,只要你想要的「\」字符出現在正則表達式,你必須讓首次出現您傳遞在字符串中逃脫它。

原樣, ".\b"是一個點的字符串.,後跟由\b代表的特殊退格字符,與".\\b"比較,這是正則表達式.\b

+0

掛起,是點還是表示任何字符的正則表達式點? – 2014-10-08 20:49:09

+1

只是一個點將匹配任何字符,正如所料:http://stackoverflow.com/questions/1480284/java-regular-expression-value-split-the-back-slash-dot-divides-by-char – Mshnik 2014-10-08 20:50:15