在Java模式中使用正则表达式全局g标志是否可能?我尝试使用
final Pattern pattern = Pattern.compile(regex,Pattern.DOTALL);
,但它的行为不像全局标志。在Java中是否有任何解决方法?我的正则表达式是:private final String regex ="(public|private|protected|static|final|abstract|synchronized|volatile)\\s*([\\w<>\\[\\]]+)\\s*(\\w+)\\s*\\(([\\w\\s\\w,<>\\[\\]]*)?\\)\\s*(\\bthrows\\b)?[\\s\\w\\s,\\w]*\\{[\\n\\t]*(.+)[\\n\\t]*((return|throw){1}\\s*)(\\w*)\\s*;\\s*[\\}]";
输入是文件内容,类似于下面链接中提到的正则表达式:https://regex101.com/r/u7vanR/3。我希望Java模式能够找到两个出现,但使用Java正则表达式标志时,它只找到第一个而不是两个。
.*
视为懒惰模式。在Java中,您需要显式地使用.*?
来匹配最小量的文本。此外,您不需要用[...]
包围转义的\\}
(它已经被\\
转义了)。 - Pshemo{1}
的目的是什么。如果没有指定量词,那么默认情况下正则表达式会搜索单个匹配项,因此通常我们不需要编写{1}
。如果正则表达式具有其他量词,如{2}
{3}
,则可能会有用,以显示哪些部分应该存在一次、两次、三次等等。 - Pshemo.*
,默认情况下它是贪婪的,因此它尝试尽可能匹配更多文本,根据您链接中的数据,它看起来像是将所有方法作为一个匹配项进行匹配(例如第一个方法的开头{ .*最后一个方法的结尾}
)。解决方法可能是使用.*?
使.*
变得勉强。 - Pshemo