2013-10-28 21 views
5

döndürülmelidir Bir dizeyi birkaç alt dizeye bölmek istiyorum ve normal ifadeleri kullanmanın bana yardımcı olabileceğini düşünüyorum.Normal ifadeyle bir dizeyi birkaç alt dizeye bölün. Her iki eşleşme ve eşleşmeyenler

I want this:  To become this: 
<choice1>   {<choice1>} 
c<hoi>ce2   {c, <hoi>, ce2} 
<ch><oi><ce>3  {<ch>, <oi>, <ce>, 3} 
choice4    {choice4} 

Küme parantez ve virgülün sadece görsel bir yardım olduğunu unutmayın. Nihai formun ne olduğu gerçekten önemli değil, sadece değerler ayrı ayrı erişilebilir/değiştirilebilir.

Şimdiden teşekkürler. Bölünmüş

input.split("(?<!^)(?=<)|(?<=>)(?!$)"); 

ile

+0

A String, düzenli ifadenize uyan parçaların bir dizisini döndürecek bir yöntem bölmesine sahiptir. "Asfdasdfadsf" .split ("REGULAREXPRESSION"); – JBA

cevap

4

eşleşir:

String str = "<ch><oi><ce>3"; 
Pattern p = Pattern.compile("<[^>]*>|\\w+"); 
Matcher m = p.matcher(str); 
while(m.find()) 
    System.out.printf("=> %s%n", m.group()); 

ÇIKIŞ:

=> <ch> 
=> <oi> 
=> <ce> 
=> 3 
+0

örnekler verilen, bu kavramak daha kolay olacağını düşünüyorum: <\\w+> | \\ w +, ama cevabınız da doğru. – Eugene

+0

Evet, bu doğru @Eugene – anubhava

3

olsa ben bu kod çalışması gerektiğini onlara

Matcher m=Pattern.compile("<[^>]*>|[^<>]+").matcher(input); 
while(m.find()) 
{ 
    m.group();//matched value 
} 
+0

+1 topal Matcher versiyonunu boşver. Senin bölünmüş regex kayaların! – Bohemian

+0

@Bohemian :-) teşekkürler ... – Anirudha

İlgili konular