正则表达式9-分组搜索

分组搜索么,听上去好像比较高深,其实没什么了,说白了,就是用圆括号 ( ) 将表达式中的一部分括起来,每一个括起来的表达式就是一个组,所以叫分组。

使用分组,我们可以实现更牛X的搜索,继续看吧:

表达式

含义

举例

(xx|yy)

搜索的字符中或者包含xx,或者包含yy

原始字符串:The gray wolf is behind the grey rock.

正则表达式:\bgr(a|e)y\b

搜索结果: gray, grey

(正则表达式)\编号

通过编号引用组。编号从 1 开始,按照从左到右的顺序,每遇到一个 (,就将该组的编号加 1。

(编号为 0 的组在哪里?完整的表达式就是编号为 0 的组喽)

原始字符串:apples apples are good to you health

正则表达式:(\w+)\s\1

搜索结果: apples apples

(?<组名>正则表达式)

(?'名字'正则表达式)

通过名字引用组

原始字符串:Apples apples are good to you health

正则表达式:(?<dup>\w+)\s+\k<dup>

搜索结果: Apples apples

正则表达式1(?=正则表达式2)

带尾巴搜索。要搜正则表达式1,但是条件是后面要接正则表达式2

原始字符串:The dog is too big

正则表达式:\b\w+\b(?=\s+is\b)

搜索结果: dog

正则表达式1(?!正则表达式2)

上面规则的“反”,即尾巴的条件不要符合表达式2

原始字符串:The dog is too big

正则表达式:\b\w+\b(?!\s+is\b)

搜索结果: the, is, too, big

(?<=正则表达式2)正则表达式1

带帽子搜索。要搜正则表达式1,但是前面要接正则表达式2

原始字符串:The dog is too big

正则表达式:(?<=\bdog\b\s+)\bis\b

搜索结果: is

(?<!正则表达式2)正则表达式1

上面规则的“反”,即帽子的条件不要符合表达式2

原始字符串:The cat is too big

正则表达式:(?<!\bdog\b\s+)\bis\b

搜索结果: is

(?(正则表达式1)yes|no)

如果正则表达式1为真,则执行 yes,否则执行 no

原始字符串:01-1234567  020-123456  777-88-9999

正则表达式:\b(?(\d{2}-)\d{2}-\d{7}|\d{3}-\d{2}-\d{4})\b

搜索结果:01-1234567, 777-88-9999

(?<组名>正则表达式)(?<组名>yes|no)

如果组名存在,则执行 yes,否则执行 no

原始字符串:01-1234567  020-123456  777-88-9999

正则表达式:\b(?<n2>\d{2}-)*(?(n2)\d{7}|\d{3}-\d{2}-\d{4})\b

搜索结果:01-1234567, 777-88-9999

好吧,我承认,上面的内容确实不如前面几章的容易懂,但是我相信,只要仔细观察和思考,并多动手试试,你一定会明白的。

如果上面的内容你都看明白了,这时候回头看“概述”那章的两句正则表达式,你能看懂它们的意思么? :-)

下面是其它一些分组的表达式,就不一一列举了,查阅 MSDN 吧:

平衡组

(?<name1-name2>正则表达式)

非捕获组

(?:正则表达式)

分组搜索的选项

(?imnsx-imnsx:正则表达式)

非回溯表达式

(?>正则表达式)

posted @ 2013-03-09 14:54  优秀程序缘  阅读(243)  评论(0编辑  收藏  举报