边界无法在段

时间:2015-07-20 06:44:43

标签: java regex string word-boundary

我想从一个段落中找到一个特定的单词。我用边界找到了一个。请考虑以下示例。

String para = "Hi how are you. I'm harshita. Hello. Hell. Helld, Hell,";
String keyword = "Hell";
boolean matches = var.matches(".*\\b"+keyword+\\b.*");
System.out.println(matches);

当我在我的unix服务器上运行时,此代码给出了以下错误。

  

java.util.regex.PatternSyntaxException:索引5附近的非法/不支持转义序列    \ bTMTH_EQUIP_IDLE_REASON \湾
        ^
        在java.util.regex.Pattern.error(Pattern.java:1713)
        在java.util.regex.Pattern.escape(Pattern.java:2177)
        在java.util.regex.Pattern.atom(Pattern.java:1952)
        在java.util.regex.Pattern.sequence(Pattern.java:1834)
        在java.util.regex.Pattern.expr(Pattern.java:1752)
        在java.util.regex.Pattern.compile(Pattern.java:1460)
        在java.util.regex.Pattern。(Pattern.java:1133)
        在java.util.regex.Pattern.compile(Pattern.java:823)
        在java.util.regex.Pattern.matches(Pattern.java:928)
        在java.lang.String.matches(String.java:2091)
        在com.acc.directory.scanner.SDScanner.main(SDScanner.java:309)

我尝试用\\b替换\\\\b,但它没有用。它返回false。 任何人都可以帮助我如何解决这个问题。我在所有地方都进行了搜索,但只给了我一个答案,用\\b替换\\\\b,但这对我不起作用。

PS。这只是一个虚拟的例子来展示我尝试过的东西以及我想要的输出。我用真实数据运行我的代码,错误来自该输出。

2 个答案:

答案 0 :(得分:0)

您需要对para变量应用匹配功能,并且忘记在第二个"之前放置\\b

String para = "Hi how are you. I'm harshita. Hello. Hell. Helld, Hell,";
String keyword = "Hell";
boolean matches = para.matches(".*\\b"+keyword+"\\b.*");
                                               ^
System.out.println(matches);

答案 1 :(得分:0)

如果我将var替换为para并修正第3行中的引号,matches()将返回true:

@Test
public void testName() throws Exception
{
    String para = "Hi how are you. I'm harshita. Hello. Hell. Helld, Hell,";
    String keyword = "Hell";
    boolean matches = para.matches(".*\\b"+keyword+"\\b.*");
    logger.debug(matches); 
}

输出:

08:52:18.059 [main] temp.temp - true