我有一个正用于匹配屏幕的正则表达式模式。 当我用它在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
请帮助......提前致谢
答案 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);
}