尝试将"??M?E???"
与模式"^([\\?]+)M([\\?]+)E([\\?]+)$"
匹配时,我得到"不匹配",虽然它适用于"?M?E??"
罚款。
我的代码段是
Pattern p = Pattern.compile("^([?]+)[M]{1}([?]+)[E]{1}([?]+)$");
Matcher m = p.matcher(input);
if ( !m.find() ) {
System.out.println("No Match");
continue ;
}
x = m.group(1).length();
y = m.group(2).length();
z = m.group(3).length();
答案 0 :(得分:1)
你应该没事,你的正则表达是好的。请注意,您不需要在字符类中转义?
,您可以简单地说:
^([?]+)M([?]+)E([?]+)$
或者,逃避它但是把它从类 * :
中取出来^(\?+)M(\?+)E(\?+)$
*请注意,在Java中,\
表示为\\
在您修改了问题并发布实际代码后,看起来您有不同的正则表达式(请不要在下次执行此操作),您应该使用matches
代替{{ 1}}。您的问题必须是find
的内容,它不会使input
返回find
,请注意true
尝试查找下一个内容与正则表达式匹配的子字符串。
答案 1 :(得分:1)
您的代码是什么样的?这很好用:
Pattern pattern = Pattern.compile("^([\\?]+)M([\\?]+)E([\\?]+)$");
System.out.println(pattern.matcher("??M?E???").matches());
System.out.println(pattern.matcher("?M?E??").matches());
输出:
true
true