2014-10-08 55 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