7.8 分组组合与反向引用符
分组组合符是将表达式中某部分内容组合起来的符号,反向引用符则是用于匹配分组组合捕获到的内容的标识符。
7.8.1 分组组合
(pattern)将pattern部分组合成一个可统一操作的组合项和子匹配,每个捕获的子匹配项按照出现的顺序存储在缓冲区中。缓冲区编号从1开始,最多可存储99个子匹配捕获的内容。存储在缓冲区中的子匹配捕获的内容,可以在编程语言中被检索,也可以在正则表达式中被反向引用。若要匹配字面意义的括号字符“(”和“)”,在正则表达式中要分别使用“\(”和“\)”。
7.8.2 反向引用
\num 匹配编号为num的缓冲区所保存的内容, num是标识特定缓冲区的一位或两位十进制正整数,这种方式称为子匹配的反向引用。反向引用能提供表示相同匹配项的能力。
例如,要匹配连续的3个数字字符,可以使用\d{3}作为正则表达式文本,可以匹配12345,但是要匹配连续的3个相同的数字字符,如3333、22222等,需要使用(\d)\1{2}作为正则表达式文本,\1表示与前面的(\d)所捕获的内容一致,\1{2}则表示前面的(\d)所捕获的内容还连续出现2次。
再如,要匹配“Is is the cost of of gasoline going up up?”中所有连续重复的单词部分,可使用/\b([a-z]+)\1\b/gi作为正则表达式文本,其中的[a-z]表示匹配a~z之间的任何一个字符,\b用于匹配单词的边界。
7.8.3 非捕获匹配
(?:pattern) 将pattern部分组合成一个可统一操作的组合项,但不把这部分内容当作子匹配捕获,即pattern部分是一个非捕获匹配,匹配的内容不存储在缓冲区中供以后使用。这对必须进行组合、但又不想让组合的部分具有子匹配特点的情况很有用。
例如,要将“xyz?”中的“xyz”组合起来,但并不想将匹配的内容保存在缓冲区中,应该使用“(?:xyz)?”,而不能使用“(abc)?”。又如,不能将“industry|industries”简单改写为“industry(ylies)”,若不需要引用或检索括号中的表达式所匹配的结果,最好还是写成“industry(?:ylies)”。
7.8.4 正向“预测先行”匹配
(?=pattern) 称为正向“预测先行”匹配,在被搜索字符串的相应位置,必须有pattern部分匹配的内容,但不作为匹配结果处理,更不会存储在捕获缓冲区中供以后使用。例如,“Windows (?=XP|2000)”只与“Windows 2000”或“Windows XP”中的“Windows”匹配,而不与“Windows 2003”中的“Windows”匹配。
注意
该模式下匹配的结果只是“Windows”部分,而使用“Windows (?:NT|2000)”匹配的是整个“Windows 2000”或“Windows NT”。如果要将 “NT”和“2000”前面的“Windows”替换成“Win”,需要使用“Windows (?=NT|2000)”,而不能使用“Windows (?:NT|2000)”,否则,整个“Windows 2000”或“Windows NT”将被替换成“Win”。
7.8.5 反向“预测先行”匹配
(?!pattern)称为反向“预测先行”匹配,在被搜索字符串的相应位置不能有pattern部分匹配的内容,此外,其功能与正向“预测先行”匹配一样。例如, “Windows (?!XP|2000)”不与“Windows 2000”或“Windows XP”中的“Windows”匹配,而可以与“Windows 2003”中的“Windows”匹配。
http://book.51cto.com/art/200804/68964.htm
分享到:
相关推荐
详解JavaScript正则表达式之分组匹配及反向引用_.docx
如果正则表达式的内容需要被再次引用,那么需要对正则表达式的内容进行分组
本文写作时,一个包含了用正则表达式进行文本处理的Java规范需求(Specification Request)已经得到认可,你可以期待在JDK的下一版本中看到它。 然而,如果现在就需要使用正则表达式,又该怎么办呢?你可以从Apache...
正则表达式,正则表达式,正则表达式 正则表达式 正则表达式 正则表达式 正则表达式 正则表达式 正则表达式
常用正则表达式 正则表达式 常用正则表达式 正则表达式
书中贯穿了大量简洁明了的示例,旨在让读者轻松掌握正则表达式。此外,书中各在线和桌面工具一应俱全,并介绍了进阶参考资料,是一本不可多得的正则表达式入门好书。《学习正则表达式》适合对正则表达式感兴趣的...
正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式...
正则表达式.rar正则表达式.rar正则表达式.rar正则表达式.rar
3、选择排除规则,一、按正则表达式把源码中符合正则的删除;二、按正则表达式把源码中符合正则的找出;三、符合正则表达式的显示True 4、选择是否不区分大小写(RegexOptions.IgnoreCase),单行模式...
正则表达式正则表达式正则表达式正则表达式 验证程序
Java正则表达式Java正则表达式Java正则表达式Java正则表达式
正则表达式帮助 有用的正则表达式帮助 有用的正则表达式帮助 有用的正则表达式帮助 有用的
正则表达式日期校验 正则表达式日期校验 正则表达式日期校验
书中提供了上百种可以在实战中使用的实例,以帮助读者使用正则表达式来处理数据和文本。对于如何使用正则表达式来解决性能不佳、误报、漏报等常见的错误以及完成一些常见的任务,《正则表达式经典实例》给出了涉及...
UE正则表达式、UE正则表达式
正则表达式 正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式
正则表达式总结正则表达式总结正则表达式总结正则表达式总结正则表达式总结正则表达式总结
可以将输入的内容转换或过滤成有正则表达式的输出表达式
正则表达式速查 正则表达式举例 正则表达式学习 (4页A4纸)
正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式