如何找出Regex在java中失败的确切原因

时间:2016-04-05 17:49:20

标签: java regex pattern-matching

我有一个正用于匹配屏幕的正则表达式模式。 当我用它在Sublime Text中测试时,同样正常工作。 但在Java执行中,代码失败

System.out.println(Pattern.matches("(B+)?|(R+)?", "RRBRR"));//false
System.out.println(Pattern.matches("(B+)?|(R+)?", "RRRRR"));//true

上述代码应该在两种情况下都是正确的,而在java中则是假的。

我的基本要求是按顺序识别独特字符组...

表示String是

RRRRBBBRRBBBRBBBRRR

然后它应该标识为

RRRR BBB RR BBB R BBB RRR

请帮助......提前致谢

2 个答案:

答案 0 :(得分:0)

试试这个:

String value = "RRRRBBBRRBBBRBBBRRR";
Pattern pattern = Pattern.compile("B+|R+");
Matcher matcher = pattern.matcher(value);
while (matcher.find()) {
    System.out.println(matcher.group());
}

第一个表达式返回false的事实是由于你在几个R的中间有一个B,所以你没有完全匹配,因为你的正则表达式只期望Rs或Bs

答案 1 :(得分:0)

匹配在开始时添加一个隐含的^最后$表示子串匹配不起作用。 find()将查找substring。

Matcher最适合这个:

public static void main (String[] args) throws java.lang.Exception
    {
        String regex = "(B+)?|(R+)?";
        Pattern pat = Pattern.compile(regex);
        Matcher matcher = pat.matcher("RRBRR");
        System.out.println(matcher.find());
        int count = 0;
        while(matcher.find()){
            System.out.println(matcher.group());
            count++;
        }
        System.out.println("Count:"+count);

    }