在Java中使用正则表达式g标志

时间:2018-08-04 16:56:42

标签: java regex regex-group

是否可以在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*[\\}]";

input是文件内容,类似于下面的regex链接中提到的内容: https://regex101.com/r/u7vanR/3

我希望Java模式能够找到这两种情况,但是使用Java regex标志只能找到第一个而不是两者。

2 个答案:

答案 0 :(得分:0)

Java没有全局标志。您可以通过findgroup获得所有匹配项。

Pattern pattern = Pattern.compile("1");
Matcher matcher = pattern.matcher("111");
while (matcher.find()) {
    System.out.println(matcher.group());
}

输出为

1
1
1

答案 1 :(得分:0)

Java 中不需要“g”标志。有同样效果的方法,像这样:

<块引用>

replaceAll(regex, replacement)