Java 正则表达式匹配器始终 returns 错误

Java regex matcher always returns false

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

#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()总是returnsfalse。有什么我想念的吗?

您似乎遇到的主要问题是您使用的定界符(如 PHP 或 Perl 或 JavaScript 中)不能在 Java 正则表达式中使用。此外,您在第一个捕获组中有您的比赛,但您使用 group() 整个比赛 returns(包括 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() 之间的文本。

问题出在“/”上。如果你想提取的只是字段名,你应该使用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));
}