正则表达式后向引用详解(扩展正则表达式功能)
2014-08-28 17:12
435 查看
使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以在表达式或其它程序中作进一步的处理。默认情况下,每个分组会自动拥有一个组号,规则是:
从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。
后向引用用于重复搜索前面某个分组匹配的文本。例如:
\1:代表分组1匹配的文本。
难以理解?请看示例:
\b(\w+)\b\s+\1\b可以用来匹配重复的单词,像go go, 或者kitty
kitty。这个表达式首先是一个单词,也就是单词开始处和结束处之间的多于一个的字母或数字(\b(\w+)\b),这个单词会被捕获到编号为1的分组中,然后是1个或几个空白符(\s+),最后是分组1中捕获的内容(也就是前面匹配的那个单词)(\1)。
你也可以自己指定子表达式的组名。要指定一个子表达式的组名,请使用这样的语法:(?<Word>\w+)(或者把尖括号换成'也行:(?'Word'\w+)),这样就把\w+的组名指定为Word了。要反向引用这个分组捕获的内容,你可以使用\k<Word>,所以上一个例子也可以写成这样:\b(?<Word>\w+)\b\s+\k<Word>\b。
使用小括号的时候,还有很多特定用途的语法。下面列出了最常用的一些:
表4.常用分组语法
我们已经讨论了前两种语法。第三个(?:exp)不会改变正则表达式的处理方式,只是这样的组匹配的内容不会像前两种那样被捕获到某个组里面,也不会拥有组号。
http://see.xidian.edu.cn/cpp/html/1413.html
从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。
后向引用用于重复搜索前面某个分组匹配的文本。例如:
\1:代表分组1匹配的文本。
难以理解?请看示例:
\b(\w+)\b\s+\1\b可以用来匹配重复的单词,像go go, 或者kitty
kitty。这个表达式首先是一个单词,也就是单词开始处和结束处之间的多于一个的字母或数字(\b(\w+)\b),这个单词会被捕获到编号为1的分组中,然后是1个或几个空白符(\s+),最后是分组1中捕获的内容(也就是前面匹配的那个单词)(\1)。
你也可以自己指定子表达式的组名。要指定一个子表达式的组名,请使用这样的语法:(?<Word>\w+)(或者把尖括号换成'也行:(?'Word'\w+)),这样就把\w+的组名指定为Word了。要反向引用这个分组捕获的内容,你可以使用\k<Word>,所以上一个例子也可以写成这样:\b(?<Word>\w+)\b\s+\k<Word>\b。
使用小括号的时候,还有很多特定用途的语法。下面列出了最常用的一些:
分类 | 代码/语法 | 说明 |
捕获 | (exp) | 匹配exp,并捕获文本到自动命名的组里 |
(?<name>exp) | 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp) | |
(?:exp) | 匹配exp,不捕获匹配的文本,也不给此分组分配组号 | |
零宽断言 | (?=exp) | 匹配exp前面的位置 |
(?<=exp) | 匹配exp后面的位置 | |
(?!exp) | 匹配后面跟的不是exp的位置 | |
(?<!exp) | 匹配前面不是exp的位置 | |
注释 | (?#comment) | 这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读 |
http://see.xidian.edu.cn/cpp/html/1413.html
相关文章推荐
- 详解JavaScript正则表达式之分组匹配及反向引用
- Java基础知识强化74:正则表达式之分割功能 (扩展练习)
- PHP扩展之文本处理(二)——PCRE正则表达式语法10——后向引用
- 详解python里使用正则表达式的全匹配功能
- 详解JavaScript正则表达式之分组匹配及反向引用
- Java基于正则表达式实现xml文件的解析功能详解
- 基于Linux下详解正则表达式(基本正则和扩展正则命令使用实例)
- 详解基于Linux下正则表达式(基本正则和扩展正则命令使用实例)
- Grep/Sed的扩展正则表达式开关,以及利用正则表达式中的分组功能
- linux系统下的grep命令功能与正则表达式详解
- Java读取文件及基于正则表达式的获取电话号码功能详解
- Java正则环视和反向引用功能与用法详解
- 正则表达式学习教程之回溯引用backreference详解
- 正则表达式知识详解之回溯引用 (java版示例)
- 基本正则表达式,扩展的正则表达式详解
- linux下egrep文件内容搜索工具及扩展正则表达式详解
- Grep/Sed的扩展正则表达式开关,以及利用正则表达式中的分组功能
- 正则表达式详解(贪婪与懒惰、前瞻与后顾、后向引用等)
- JAVA正则表达式4种常用功能
- 正则表达式使用详解(1)