Java正则表达式匹配器始终返回false

时间:2015-06-29 08:38:19

标签: java regex matcher

我有一个字符串表达式,我需要从中获取一些值。字符串如下

#min({(((fields['example6'].value + fields['example5'].value) * ((fields['example1'].value*5)+fields['example2'].value+fields['example3'].value-fields['example4'].value)) * 0.15),15,9.087})

从这个stribg,我需要获得一个字符串数组列表,其中包含“example1”,“example2”等值。

我有一个Java方法,如下所示:

String regex = "/fields\\[['\"]([\\w\\s]+)['\"]\\]/g";
ArrayList<String> arL = new ArrayList<String>();
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(expression);

while(m.find()){
    arL.add(m.group());
}

m.find()始终返回false。有什么我想念的吗?

2 个答案:

答案 0 :(得分:1)

您似乎遇到的主要问题是您正在使用无法在Java正则表达式中使用的分隔符(如在PHP或Perl或JavaScript中)。此外,您在第一个捕获组中有匹配,但是您使用group()返回整个匹配(包括fields[')。

这是一个有效的代码:

String str = "#min({(((fields['example6'].value + fields['example5'].value) * ((fields['example1'].value*5)+fields['example2'].value+fields['example3'].value-fields['example4'].value)) * 0.15),15,9.087})";
ArrayList<String> arL = new ArrayList<String>();
String rx = "(?<=fields\\[['\"])[\\w\\s]*(?=['\"]\\])";
Pattern ptrn = Pattern.compile(rx);
Matcher m = ptrn.matcher(str);
while (m.find()) {
    arL.add(m.group());
}

这是working IDEONE demo

请注意,我添加了环视以仅提取'group()之间的文字。

答案 1 :(得分:1)

问题在于'/'。如果要提取的内容只是字段名称,则应使用m.group(1):

String regex = "fields\\[['\"]([\\w\\s]+)['\"]\\]";
ArrayList<String> arL = new ArrayList<String>();
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(expression);

while(m.find()){
    arL.add(m.group(1));
}