Java正则表达式只在我想要全部时找到最后一个匹配项

Java正则表达式只在我想要全部时找到最后一个匹配项,java,regex,Java,Regex,我有这个 Pattern pattern = Pattern.compile(".*(MyFunc[(](?s).*[)];).*", Pattern.DOTALL | Pattern.MULTILINE); 我想匹配MyFunc(任何事物)的所有事件 以上仅打印文本中的最后一个匹配项 Binding(CTRL+O, MyFunc("test1\ndkjs"); ParameterizedCommand(C MyFunc("test2"); dskj MyFunc("test3\n"); k

我有这个

Pattern pattern = Pattern.compile(".*(MyFunc[(](?s).*[)];).*", Pattern.DOTALL | Pattern.MULTILINE);
我想匹配MyFunc(任何事物)的所有事件

以上仅打印文本中的最后一个匹配项

Binding(CTRL+O, MyFunc("test1\ndkjs");  ParameterizedCommand(C
MyFunc("test2"); dskj MyFunc("test3\n"); kdjskfjskjfksjf
所需输出:

MyFunc("test1\ndkjs");
MyFunc("test2");
MyFunc("test3\n");

使用此正则表达式尝试完全相同的代码:

(MyFunc\\(.*?\\);)

使用此正则表达式尝试完全相同的代码:

(MyFunc\\(.*?\\);)

如果您想捕获对
MyFunc
的所有“调用”,那么您需要的正则表达式是

(MyFunc[(](?s).*?[)];)

还考虑避免点星,并用非右括号将括号内的部分,如:

 (MyFunc[(][^)]*[)];)

还请注意,链接到上面的regxr演示设置了点全部、全局和多行标志;所以你可以匹配像

MyFunc(
   xyz
   );
当放入代码时,您可以轻松地将这些标志添加到正则表达式中。注意:如果使用
[^)]*


如果您想捕获对
MyFunc
的所有“调用”,那么您需要的正则表达式是

(MyFunc[(](?s).*?[)];)

还考虑避免点星,并用非右括号将括号内的部分,如:

 (MyFunc[(][^)]*[)];)

还请注意,链接到上面的regxr演示设置了点全部、全局和多行标志;所以你可以匹配像

MyFunc(
   xyz
   );
当放入代码时,您可以轻松地将这些标志添加到正则表达式中。注意:如果使用
[^)]*

如果您想找到

MyFunc("test1\ndkjs");
MyFunc("test2");
MyFunc("test3\n");
那么您就不需要在正则表达式的开始或结束处使用
*
。只需创建匹配
MyFunc(
,零个或多个非
)的正则表达式在末尾

类似于
MyFunc\\([^]*\\)

如果要查找

MyFunc("test1\ndkjs");
MyFunc("test2");
MyFunc("test3\n");
那么您就不需要在正则表达式的开始或结束处使用
*
。只需创建匹配
MyFunc(
,零个或多个非
)的正则表达式在末尾


类似于
MyFunc\\([^]*\\)

您是否遇到贪婪量词和非贪婪量词之间的区别?是的。我在过去遇到过一次。但就我而言,我不需要贪婪的量词吗?如果不是的话,我肯定错过了什么。我从来都不擅长正则表达式。我不需要一个现成的解决方案。一个简单的指导就足够了。谢谢你的时间。好的,从回答中我理解我的错误。谢谢大家。你们遇到贪婪量词和非贪婪量词之间的区别了吗?是的。我在过去遇到过一次。但就我而言,我不需要贪婪的量词吗?如果不是的话,我肯定错过了什么。我从来都不擅长正则表达式。我不需要一个现成的解决方案。一个简单的指导就足够了。谢谢你的时间。好的,从回答中我理解我的错误。谢谢大家。请记住,您的输入中有一个\n。它将在输出中产生一个新行。向上投票,但我将选择Ray的答案,因为现场演示(这是一个非常接近的结果:P)。谢谢您的帮助。请记住您的输入中有一个\n。它将在输出中产生一个新行。向上投票,但我将选择Ray的答案,因为现场演示(这是一个非常接近的结果:P)。谢谢你的帮助。