2016-04-05 14 views
0

Ekranla eşleştirmek için kullanıyorum bir Regex Kalıbı var. Sublime Text'te test etmek için kullandığımda, aynı şey gayet iyi çalışıyor. ama Java yürütülmesinde, kod java o kadar yanlış geliyor oysa yukarıdaki kod, her iki durumda da olduğu gibi gerçek geliyor olmalıRegex'in neden başarısız olduğunu tam olarak anlamak için nasıl kullanılır?

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

başarısız oluyor.

benim temel gereksinimi Dize

RRRR BBB RR BBB R BBB RRR 

Lütfen yardım olarak

RRRRBBBRRBBBRBBBRRR 

Sonra belirlemelidir ise

anlamı ... sırayla eşsiz karakteri gruplarını tespit etmektir .. .Teşekkürler

+1

desen maçları 'in()' sabitlenir, bu '^ içeride sanki o (?: ...) $'. –

+0

Ne yapmalıyım? Lütfen yardım edin –

+0

Kullanım 'Matcher # find()' –

cevap

0

Bunu deneyin:

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

ilk ifadesi false döndürür gerçeği size normal ifade sadece Rs veya işletmelerini

bekliyoruz beri böylece tam bir eşleşme yok birkaç R bir ortasında bir B'li olmasından kaynaklanmaktadır
+0

Teşekkürler bu Repex gerekli –

+0

Ben bu yardımcı oldu sevindim –

0

eşleşmeleri, başlangıçta & $ tutarındaki bir örtük^ekler ve bu da alt tabaka eşleşmelerinin işe yaramayacağı anlamına gelir. find() substring'i arar.

eşleştirici bunun için en uygun:

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

    } 
İlgili konular