先看帖子:
正则的高级应用之非捕获组的 ?=
1.
public static void main(String[] args) {
// (?=X) X, via zero-width positive lookahead
String test1 = "aba";
String regex1 = "[a-z](?=b)(b[a-z])";
boolean b = test1.matches(regex1);
System.out.println(b);
}
//结果是true
// ^ $ 可以不加,因为不是multiline.
//如果regex1改成"[a-z](?=b)([a-z])" 缺少那个b就不对了。因为b不占位,下一组还要从b开始的.
2.
public static void main(String[] args) {
// (?=X) X, via zero-width positive lookahead
String test1 = "abacaba";
String regex1 = "([a-z](?=b))(ba)";
Pattern p = Pattern.compile(regex1);
Matcher matcher = p.matcher(test1);
while(matcher.find()){
System.out.println(matcher.start()+" : "+matcher.end());
}
结果是
0 : 3
4 : 7
(?=X) X,通过零宽度的正 lookahead , 注意那个零宽度就能明白怎么回事了.
注:本人文笔不好,不会太写Blog。这里只是随记而已,以备不时之需。
文本的格式总是对不齐啊,晕死 - -!