Java正则表达式问号

时间:2015-03-09 12:52:54

标签: java regex

尝试将"??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();

2 个答案:

答案 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