正则表达式?对于一组词

Son*_*pta 5 java regex regex-group

我想为 NAME;NAME;NAME 和 NAME;NAME;NAME;NAME 设置一个正则表达式,其中 NAME 的第四次出现是可选的。

我有一个正则表达式 (.+);(.+);(.+) 匹配第一个模式但不匹配第二个。我试过玩?但它不适用于 (.+);(.+);(.+)(;(.+))?基本上,我想实现第四个 (.+) 为零或一次出现。

Анд*_*пов 0

您可以使用惰性量词+?。例子:

    private static final Pattern pattern = Pattern.compile("((\\w+);?)+?");

    public void extractGroups(String input) {
        var matcher = pattern.matcher(input);
        while (matcher.find()) {
            System.out.println(matcher.group(2));
        }
    }
Run Code Online (Sandbox Code Playgroud)

输入"FIRST;SECOND;THIRD;FOURTH"给出

FIRST
SECOND
THIRD
FOURTH
Run Code Online (Sandbox Code Playgroud)

输入"FIRST;SECOND;THIRD"给出

FIRST
SECOND
THIRD
Run Code Online (Sandbox Code Playgroud)

惰性量词用于匹配最短的可能String。如果您在while循环中重复调用它,您将获得所有匹配项。另外,您应该更好地使用\\w数学单词,因为.还包括;符号;