如何获得正则表达式以丢弃匹配的一部分?
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
时仅输出x
和System.out.println(matcher.group());
即丢弃(?:a*?)
P.S。
我知道我可以使用matcher.group(1)
自行获取x
和y
,但我希望整个匹配输出x
和{{1只需要不必访问特定的组。
答案 0 :(得分:4)
您可以在正则表达式中使用外观来获取匹配中所需的部分:
(?<=b)[xyz](?=a*c)
(?=a*c)
是一个积极的先行者,断言我们提前0
或更多a
后跟c
。这是一个零宽度断言,因此您的匹配仍然是[xyz]
个字符之一。