我的字符串如下
"ValueFilter("val1") AND ColumnFilter("val2") AND ValueFilter("val3")"
我已将以下正则表达式存储在数组中。使用for循环我试图匹配模式
"ValueFilter\\((.*?)\\)","ColumnFilter\\((.*?)\\)"
我将做的是将替换括号中的值并将其复制到新字符串。
当我在第一个循环中对字符串运行上面的正则表达式时,我有XFilter所以它将匹配两个匹配项。但我想按顺序这样做。
这是我想要实现的目标
首先我想首先匹配ValueFilter然后再匹配ColumnFilter然后再匹配ValueFilter。我怎样才能做到这一点?
修改:添加了代码
String expr = "\"ValueFilter(\"val1\") AND ColumnFilter(\"val2\") AND ValueFilter(\"val3\")\"";
String patterns = {"ValueFilter\\((.*?)\\)", "ColumnFilter\\((.*?)\\)"}
for (String pattern : patterns) {
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(expr);
while (m.find()) {
//do something
}
}
预期输出
ValueFilter("val1")
ColumnFilter("val2")
ValueFilter("val3")
答案 0 :(得分:2)
您可以将此正则表达式<anything>: STUPID; <anything>: <anything>...
与模式一起使用,并且必须使用以下方法循环匹配:
[XY]Filter\((.*?)\)
注意您可以使用String str = "\"XFilter(\"val1\") AND YFilter(\"val2\") AND XFilter(\"val3\")\"";
String regex = "[XY]Filter\\((.*?)\\)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
System.out.println(matcher.group());
}
来表示匹配[XY]
或X
,
<强>输出强>
Y
如果你只想获得值,你可以得到像XFilter("val1")
YFilter("val2")
XFilter("val3")
这样的组1,输出应该是:
matcher.group(1)
修改强>
如果我有filtername作为&#34;
"val1" "val2" "val3"
&#34;和&#34;ValueFilter
&#34;代替ColumnFilter
和X
在这种情况下,您可以使用Y
代替(Value|Column)
,这意味着匹配[XY]
或ValueFilter
,正则表达式应如下所示:
ColumnFilter
<强>输出强>
String str = "\"ValueFilter(\"val1\") AND ColumnFilter(\"val2\") AND ValueFilter(\"val3\")\"";
String regex = "(Value|Column)Filter\\((.*?)\\)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
System.out.println(matcher.group());
}