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