正则表达式模式在匹配器上无法正常工作

时间:2016-06-30 23:00:37

标签: java regex

我有一个这样的字符串:

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。我做错了什么?

2 个答案:

答案 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.+'(.*?)'