`

正则表达式中的分组组合与反向引用符(转)

 
阅读更多

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

 

分享到:
评论

相关推荐

    最详细正则表达式教程、最好正则表达式参考

    4. **分组与反向引用**:使用圆括号 `( )` 对正则表达式的一部分进行分组,可以方便地应用量词或逻辑运算。分组还可以用于反向引用,例如,`\1` 表示对第一个分组匹配的内容的引用。 5. **选择与或**:使用竖线 `|`...

    精通正则表达式05

    3. **分组与反向引用**:学习如何使用圆括号`( )`来创建分组,并了解反向引用(`\number`)用于匹配之前分组捕获的内容。 4. **正向前瞻断言与正向后瞻断言**:这些高级特性允许我们在匹配时检查后面的文本,但不...

    正则表达式实时测试工具(源码)

    对于学习正则表达式,推荐熟悉一些常用的元字符、预定义字符类以及量词的用法,同时掌握如何使用特殊结构如选择符(|)、反向引用和非捕获组等。此外,理解正则表达式的匹配顺序和优先级也是十分重要的。 总之,...

    超好用的正则表达式可视化调试工具

    正则表达式的基本元素包括字符集(如[a-z]表示小写字母)、量词(如*表示零个或多个前面的字符)、定位符(如^表示行首,$表示行尾)以及组合这些元素的特殊结构,如括号用于分组,管道符|表示或操作等。而这款工具...

    《正则表达式中文手册》

    后向引用是指在一个正则表达式中引用前面已经捕获的子模式。 1. **理解后向引用** - **概念**:使用`\1`、`\2`等来引用之前定义的子模式。 - **示例**:`(cat)\1`表示匹配相同的两个"cat"。 2. **后向引用的一个...

    神奇的匹配 正则表达式求精之旅

    8. **反向引用**:在分组后使用\数字,如\1,引用前面分组匹配的内容。 9. **非贪婪匹配**:在量词后加上?,如.*?,使匹配尽可能短。 10. **正向前瞻与正向后瞻**:\(?=...)和(?)用于判断当前位置后面的字符是否...

    最详细的正则表达式教程

    反向引用对一个正则表达式模式或部分模式两边添加圆括号将导致相关匹配存储到一个临时缓冲区中,所捕获的每个子匹配都按照在正则表达式模式中从左到右出现的顺序存储。 在正则表达式中,^ 表示起始位置,但放到 [] ...

    正则表达式简明参考.pdf

    正则表达式是一种用于匹配字符串...以上知识点总结了正则表达式的核心用法,包括元字符、字符转义、字符类、反义、分支、分组、反向引用、零宽断言、贪婪与懒惰以及处理选项等,为熟练使用正则表达式提供了基本的指导。

    正则表达式系统教程——学习正则的最简单的教程

    此外,正则表达式还支持分组和反向引用。通过"( )"将部分表达式括起来,我们可以创建一个捕获组,这个组内的匹配结果可以在后续表达式中引用。反向引用来实现复杂的匹配,例如,"(.)\1"会匹配任何连续重复的两个字符...

    正则表达式实现将MM/DD/YYYY格式的日期转换为YYYY-MM-DD格式

    通过正则表达式转换这两种格式,不仅涉及到对格式的理解,还要掌握正则表达式中量词、分组和反向引用的概念。 具体到本文所提及的正则表达式实现,采用的是ereg函数。ereg是PHP语言中的一个函数,用于匹配字符串...

    中文正则表达式简单易懂

    - **反向引用**:在正则表达式中使用括号进行分组后,可以使用`\1`、`\2`等来引用前一个分组匹配到的内容。 - **预查和回溯**:预查是在匹配过程中不消耗字符的情况下检查是否匹配。回溯则是在匹配过程中尝试不同的...

    头歌教学实践平台 Web前端开发基础 JavaScript学习手册十:正则表达式

    :`:非捕获分组,不保存匹配结果,仅用于组合正则表达式。 六、反向引用 1. `\number`:反向引用,用于引用前面已经捕获的分组内容。 七、零宽度断言 1. `^`:在字符串开头,但在多行模式下也可以在每行开头。 ...

    Python正则表达式基础

    Python正则表达式是Python编程语言中的一个强大...在实际项目中,根据需求组合使用各种正则表达式功能,可以完成复杂的文本分析任务。通过阅读《Python正则表达式基础》PDF文档,可以深入理解这些概念并进行实践操作。

    java \javascript 正则表达式

    在Java中,正则表达式通常与`java.util.regex`包中的类一起使用,如`Pattern`和`Matcher`。`Pattern`类用于编译正则表达式,并创建一个模式对象。`Matcher`类则用于在特定输入字符串上应用这个模式,进行匹配和查找...

    java正则表达式的使用示例

    分组与反向引用 正则表达式可以通过括号定义分组,分组可以捕获匹配的子串。例如,`(\\w+)@(.+)`可以匹配电子邮件地址。反向引用则可以引用之前捕获的分组,如`\1`代表第一个分组,`\2`代表第二个分组。 ### 5. ...

    正则表达式.rar正则表达式.rar正则表达式.rar正则表达式.rar正则表达式.rar

    4. **分组与反向引用**:使用`(`和`)`可以创建一个分组,分组内的模式可以作为一个整体使用。反向引用如`\1`、`\2`等可以引用之前匹配的分组内容。 5. **选择与分支**:用`|`分隔的多个模式表示或的关系,例如`cat|...

    正则表达式.7z

    同时,分组还可以利用反向引用,例如"\1"代表第一个捕获的子模式,这在复杂的匹配和替换场景中非常有用。 正则表达式还支持零宽断言,如"?"(lookahead)和"(?<!)"(lookbehind),它们可以检查某个位置后面的或前面的...

Global site tag (gtag.js) - Google Analytics