文本错误地与组中的子字符串匹配

时间:2015-09-11 18:37:48

标签: java regex

我想查看文本以查看它是以什么或谁开头,并且是一个问题类型,所以为此我编写了以下代码:

class B;

class A{
public: 
    A(B b);
};

class B{
public:
    B(A a);
};

一切都很好但是例如当我尝试时:

private static void startWithQOrIf(String commentstr){

     String urlPattern = "(|who|what).*\\?.*$";
     Pattern p = Pattern.compile(urlPattern,Pattern.CASE_INSENSITIVE);
        Matcher m = p.matcher(commentstr);
        if (m.find()) {
            System.out.println("yes");
        }
}

也会匹配,但不应该因为我正在寻找谁不是whooooooooo

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

您可以使用字边界\b确保整个单词:

(|who|what)\\b.*\\?.*$
            ^^

如果交替组中的单词应该出现在字符串的开头,您只需使用matches并删除$锚点:

 String urlPattern = "(|who|what)\\b.*\\?.*";
 Pattern p = Pattern.compile(urlPattern,Pattern.CASE_INSENSITIVE);
    Matcher m = p.matcher(commentstr);
    if (m.matches()) {                        // < - Here, matches is used
        System.out.println("yes");
    }

请注意(|who|what)匹配空字符串,whowhat。如果您不打算允许空字符串,请仅使用(who|what)

答案 1 :(得分:3)

您必须使用字边界。

String urlPattern = "\\b(who|what)\\b.*\\?.*$";