我有一个字符串表达式,我需要从中获取一些值。字符串如下
#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
。有什么我想念的吗?
答案 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());
}
请注意,我添加了环视以仅提取'
与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));
}