- (pattern):表示匹配并获取这一匹配。所谓获取即表达式中可以通过$1....$9(js中)中获取,在java中引用pattern的写法如下:
String str = "abcpattern";
Pattern p = Pattern.compile("(pattern)");
Matcher m = p.matcher(str);
if (m.find()) {
// 注意, group中如果参数是0代表全部组,1 代表第一组, 2 代表第二组, 以此类推
System.out.println(m.group(1)); // 打印: pattern
}
- (?:pattern):表示匹配但不获取这一匹配结果。该结果不会缓存起来,也就是说不能通过$1...$9来引用。这种方式叫做非获取匹配。
- (?=pattern):这种与前面一种类似,不同的是匹配结果不包含括弧内的匹配内容。这种方式叫做正向肯定预查。
以上两种用一个js例子做讲解:
var str = "windows2010abc";
str.match(/windows(?:2010)/) // 匹配字符串windows2010
str.match(/windows(?=2010)/) // 匹配字符串windows
- (?!pattern):表示正向否定预查,在不匹配pattern处开始匹配字符串。继续上面例子为例:
str.match(/windows(?!=2010)/) // 匹配不到任何子串
str.match(/windows(?!=2011)/) // 匹配windows
- (?<=pattern):反向肯定预查,与正向肯定预查类似,方向是向前匹配但不获取。反向与正向对比例:
str.match(/(?<=windows)2010/) // 匹配2010
str.match(/(?=windows)2010/) // 匹配不到任何字符串
- (?<!pattern):反向否定预查,同理