Java 文本与组中单词的子字符串错误匹配
我想检查文本,看看它是否以what或who开头,并且是一个问题类型,因此我编写了以下代码:Java 文本与组中单词的子字符串错误匹配,java,regex,Java,Regex,我想检查文本,看看它是否以what或who开头,并且是一个问题类型,因此我编写了以下代码: private static void startWithQOrIf(String commentstr){ String urlPattern = "(|who|what).*\\?.*$"; Pattern p = Pattern.compile(urlPattern,Pattern.CASE_INSENSITIVE); Matcher m = p.matcher
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 is the follower?
也会匹配,但不应该匹配,因为我在寻找谁不是谁
有什么想法吗?您可以使用单词边界来确保一个完整的单词
\b
:
(|who|what)\\b.*\\?.*$
^^
如果替换组中的单词应该出现在字符串的开头,您可以使用匹配项并删除$
锚定:
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");
}
String urlPattern=“(|谁|什么)\\b.\\\?*”;
Pattern p=Pattern.compile(urlPattern,Pattern.CASE\u不区分大小写);
Matcher m=p.Matcher(commentstr);
如果(m.matches()){/<-这里使用matches
System.out.println(“是”);
}
请注意,(| who | what)
匹配空字符串,或who
,或what
。如果您不打算允许使用空字符串,请仅使用(who | what)
您必须使用单词边界
String urlPattern = "\\b(who|what)\\b.*\\?.*$";
你知道这个(|谁|什么)
是做什么的吗?@AvinashRaj谢谢你是的,我在下面的一个答案中学到了。谢谢你对这件事的小心