正则表达式 - 如何丢弃匹配

时间:2017-01-16 20:22:24

标签: java regex

如何获得正则表达式以丢弃匹配的一部分?

public class main {
    public static void main(String[] args) {
        Pattern pattern = Pattern.compile("(?<=b)([xyz])(?:a*?)c");
        String string = "abyaacbxaaac";
        Matcher matcher = pattern.matcher(string);
        while(matcher.find()){
            System.out.println(matcher.group());
        }
    }
}

这里的输出是:

yaac   
xaaac

我希望在运行y时仅输出xSystem.out.println(matcher.group()); 即丢弃(?:a*?)

匹配的内容

P.S。

我知道我可以使用matcher.group(1)自行获取xy,但我希望整个匹配输出x和{{1只需要不必访问特定的组。

1 个答案:

答案 0 :(得分:4)

您可以在正则表达式中使用外观来获取匹配中所需的部分:

(?<=b)[xyz](?=a*c)

RegEx Demo

(?=a*c)是一个积极的先行者,断言我们提前0或更多a后跟c。这是一个零宽度断言,因此您的匹配仍然是[xyz]个字符之一。