2016-06-30 9 views
2

で正常に動作していない私は、このような文字列を持っている:正規表現パターンがマッチャ

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

私は、例えば最初のものはzc5u5なり、ben[]から名前を取得したいです。

私は現在、このコードを持っています:

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

残念ながらパターンは、例えば、行全体、だけではなく値と一致しませんzc5u5。私は間違って何をしていますか?

+0

は何をキャプチャしたいですか? 'ben'と' zc5u5'、あるいはそのうちの一つだけ? –

+0

ちょうど '' zc5u5''です。私のパターンは本当にうまくいきます(残念ながら、それは私が必要とするものではありません)。 – Michael

+0

Nevermind、@ Elliotの答えはかなり得られました。私は間違っていました。 – Michael

答えて

2

インデックスと値をキャプチャする場合は2つのグループが必要です。割り当ての周りにオプションのホワイトスペースのサポートを追加します(\\s*)。あなたはこのように正規表現を使用することができます

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

何かのように、:

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

Regex demo

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