2016-04-05 4 views
0

Ich habe ein Regex-Muster, das ich verwende, um den Bildschirm zu entsprechen. Wenn ich es in Sublime Text zu testen, funktioniert das gleiche gut. aber in Java Ausführung wird der CodeWie finde ich den genauen Grund, warum Regex in Java versagt

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

Der obige Code andernfalls sollte es als wahr in beiden Fällen, während in Java als falsch kommt kommen.

meine Grundvoraussetzung ist es, Gruppen von einzigartigem Charakter in Folge zu identifizieren ...

Sinn, wenn String ist

RRRRBBBRRBBBRBBBRRR 

Dann sollte es identifizieren als

RRRR BBB RR BBB R BBB RRR 

Bitte helfen .. . Vielen Dank im Voraus

+1

Das Muster in 'Streichhölzer verankert ist()', es ist, als ob es in '^ waren (?: ...) $'. –

+0

was soll ich tun ... bitte helfen –

+0

Verwenden Sie 'Matcher # find()' –

Antwort

0

Versuchen Sie dies:

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

Die Tatsache, dass der erste Ausdruck ist auf die Tatsache zurückzuführen false zurückgibt, dass Sie ein B in einer Mitte von mehreren R haben, so dass Sie keine genaue Übereinstimmung haben seit Ihrem regulären Ausdruck nur Rs oder Bs erwarten

+0

Danke das ist die genaue Regex, die ich brauchte –

+0

Ich bin froh, dass es geholfen hat –

0

Übereinstimmungen fügt ein implizites^am Anfang & $ am Ende hinzu, was bedeutet, dass Teilstring-Übereinstimmungen nicht funktionieren. find() sucht nach Substring.

Matcher ist am besten geeignet für diese:

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); 

    } 
Verwandte Themen