2016-06-30 13 views
2

Ich habe eine Zeichenfolge wie folgt:RegexMuster funktioniert nicht richtig auf Matcher

ben[0]='zc5u5'; 
icb[0]='M'; 
bild[0]='b1_413134.jpg'; 
ort[0]='Köln';kmm[0]=0.00074758603074103;alt[0]='18'; 
jti[0]=413134; 
upd[0]='u41313486729.js'; 
jon[0]=0; 
jco[0]=0; 
jch[0]=0; 
ben[1]='Oukg5'; 
icb[1]='M'; 
bild[1]='mannse.jpg'; 
jti[1]=412425; 
upd[1]='u41242570092.js'; 
jon[1]=0; 
jco[1]=0; 
jch[1]=0; 
ben[2]='Tester356'; 
icb[2]='M'; 
bild[2]='b1_247967.jpg'; 

Ich möchte die Namen von ben[] erhalten, zum Beispiel die erste zc5u5 sein würde.

Ich habe zur Zeit diesen Code:

  Pattern pattern = Pattern.compile("(ben\\[\\d+\\]=').+?'"); 
      Matcher matcher = pattern.matcher(string); 

      LinkedList<String> list = new LinkedList<String>(); 

      // Loop through and find all matches and store them into the List 
      while(matcher.find()) { 
       list.add(matcher.group()); 
      } 

Leider ist das Muster die ganze Zeile passen, anstatt nur den Wert, z.B. zc5u5. Was mache ich falsch?

+0

was wollen Sie erfassen? 'ben' und' zc5u5' oder nur einer von ihnen? –

+0

Nur '' zc5u5''. Mein Muster funktioniert tatsächlich (irgendwie), leider fängt es die ganze Linie ein, das ist nicht was ich brauche. – Michael

+0

Nevermind, @ Elliot hat so ziemlich geantwortet, ich habe es einfach falsch gemacht. – Michael

Antwort

2

Sie benötigen zwei Gruppen, wenn Sie den Index und den Wert erfassen möchten, und ich würde Unterstützung für optionalen Leerraum um die Zuweisung (\\s*) hinzufügen. So etwas wie,

Pattern pattern = Pattern.compile("ben\\[(\\d+)\\]\\s*=\\s*'(.+)';"); 
Matcher matcher = pattern.matcher(string); 
if (matcher.matches()) { 
    System.out.printf("index %s = %s%n", matcher.group(1), matcher.group(2)); 
} 
0

Sie einen regulären Ausdruck wie diese verwenden:

ben\b.+'(.*?)' 

Regex demo

Pattern pattern = Pattern.compile("ben\\b.*'(.*?)'"); 
Matcher matcher = pattern.matcher(string); 
if (matcher.matches()) { 
    System.out.printf(matcher.group(1)); 
} 
Verwandte Themen