捕获匹配
正则表达式可以用于从一个字符串中提取出符合某种格式的内容。有时候我们需要知道这段内容里面的某个内容,可以使用捕获匹配。
例如,Java\d+\.\d+
可以匹配Java1.8
,但我们如果要知道版本号,这里就可以使用捕获匹配。
捕获匹配使用括号()
实现。括号中的内容将会被捕获并编号,第一个括号是1,第二个是2,以此类推。因此,Java(\d+\.\d+)
可以在匹配Java1.8
的同时,获取版本号1.8
。
在捕获后,还可以使用\1
、\2
等来重新使用之前匹配的结果。例如,([a-z])0\1
将匹配a0a
、b0b
,但不能匹配a0b
。
非捕获匹配
尽管有括号,但这些匹配不是捕获匹配,它们不能被用在\1
中。
正则表达式 | 含义 |
---|---|
(?:pattern) | 匹配正则表达式pattern |
(?=pattern) | 正向预测匹配pattern |
(?!pattern) | 反向预测匹配pattern |
例:
industr(?:y|ies)
将匹配industry
或industries
;Java(?=8)
将匹配Java8
中的Java
,而不匹配Java1.8
中的Java
;Java(?!8)
将匹配Java1.8
中的Java
,而不匹配Java8
中的Java
。