我有一个这样的字符串:
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';
我想从ben[]
获取名称,例如第一个名称为zc5u5
。
我目前有这段代码:
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 :(得分: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));
}
答案 1 :(得分:0)
你可以使用这样的正则表达式:
longSongs->tracks[i]->mm = all->tracks[i]->mm;
longSongs->tracks[i]->ss = all->tracks[i]->ss;
longSongs->tracks[i]->bpm = all->tracks[i]->bpm;
<强> Regex demo 强>
ben\b.+'(.*?)'