我有这个
Pattern pattern = Pattern.compile(".*(MyFunc[(](?s).*[)];).*", Pattern.DOTALL | Pattern.MULTILINE);
我想匹配MyFunc的所有出现(ANYTHING);
while (matcher.find()) {
System.out.println(matcher.group(1));
}
以上仅打印文本中的最后一个匹配
Binding(CTRL+O, MyFunc("test1\ndkjs"); ParameterizedCommand(C
MyFunc("test2"); dskj MyFunc("test3\n"); kdjskfjskjfksjf
期望的输出:
MyFunc("test1\ndkjs");
MyFunc("test2");
MyFunc("test3\n");
答案 0 :(得分:2)
使用此正则表达式尝试完全相同的代码:
(MyFunc\\(.*?\\);)
答案 1 :(得分:2)
如果您想捕获MyFunc
的所有“来电”,那么您需要的正则表达式是
(MyFunc[(](?s).*?[)];)
同时考虑避免使用点星并将括号内的部分放入非右边的括号中,如下所示:
(MyFunc[(][^)]*[)];)
Live demo for this alternative
另请注意,上面链接的regxr演示设置了全点和全局和多行标志;所以你可以匹配像
这样的东西MyFunc(
xyz
);
您可以在放入代码时轻松地将这些标记添加到正则表达式中。请注意,如果您使用(?s)
[^)]*
答案 2 :(得分:2)
如果你想找到
MyFunc("test1\ndkjs");
MyFunc("test2");
MyFunc("test3\n");
然后只需要在正则表达式的开头或结尾处.*
。只需创建匹配MyFunc(
的正则表达式,最后不是)
和);
的零个或多个字符。
像MyFunc\\([^)]*\\);