单词边界和模式报价不起作用

时间:2017-09-10 15:19:30

标签: java regex word-boundary

String haystack = "hey (( howdy";
haystack.matches(".*\\b\\Q((\\E\\b.*");

第2行应返回true,但返回false。这是Java中的错误,还是我做错了?

编辑:我想要实现的是查看haystack

中是否存在用户输入(完整单词)

2 个答案:

答案 0 :(得分:2)

要做你想做的事,你只需要搜索用户输入。

public static void main(String[] args) {
    String test = "some text (( other text inside a stack";
    String userInput = "((";

    Pattern p = Pattern.compile(".*" + Pattern.quote(userInput) + ".*");
    Matcher m = p.matcher(test);
    System.out.println(m.find());
}

问题是((不是一个单词,因此在\b

之前和后缀时无法匹配

打印:

true

注意:要适合可以兼容两者的程序。如果用户输入是单词,您可能会首先测试,如果是,则使用边界,如果不是上述解决方案。

答案 1 :(得分:0)

很可能它与'\ b'字边界匹配有关,因为它依赖于本文的实现:http://www.regular-expressions.info/wordboundaries.html

你试过了吗?

String haystack = "hey (( howdy";
haystack.matches(".*\\b \\Q((\\E \\b.*"));

注意\ b。

之前/之后的空格