import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class NonCapturing {
public static void main(String args[]) {
positiveLookahead_1();
positiveLookahead_2();
System.out.println("---------");
negativeLookahead_1();
negativeLookahead_2();
System.out.println("---------");
positiveLookbehind_1();
System.out.println("---------");
negativeLookbehind_1();
}
private static void positiveLookahead_1() {
Pattern p = Pattern.compile(".{2}(?=a)");
Matcher m = p.matcher("55a66b");
while (m.find()) {
/*
要求匹配结果的后面是a, 匹配结果不包含a, 将捕获:
55
*/
System.out.println(m.group());
}
}
private static void positiveLookahead_2() {
Pattern p = Pattern.compile("(?=a).{2}");
Matcher m = p.matcher("55a66b");
while (m.find()) {
/*
要求匹配结果的第一位为a, 将捕获:
a6
*/
System.out.println(m.group());
}
}
private static void negativeLookahead_1() {
Pattern p = Pattern.compile("(?!a).{2}");
Matcher m = p.matcher("55a66b");
while (m.find()) {
/*
要求匹配结果的第一位不为a, 将捕获:
55
66
*/
System.out.println(m.group());
}
}
private static void negativeLookahead_2() {
Pattern p = Pattern.compile(".{2}(?!a)");
Matcher m = p.matcher("55a66b");
while (m.find()) {
/*
要求匹配结果的后面不是a,匹配结果可以包含a, 将捕获:
5a
66
*/
System.out.println(m.group());
}
}
private static void positiveLookbehind_1() {
Pattern p = Pattern.compile(".{2}(?<=a)");
Matcher m = p.matcher("55a66b");
while (m.find()) {
/*
5a
*/
System.out.println(m.group());
}
}
private static void negativeLookbehind_1() {
Pattern p = Pattern.compile(".{2}(?<!a)");
Matcher m = p.matcher("55a66b");
while (m.find()) {
/*
55
a6
6b
*/
System.out.println(m.group());
}
}
}