分组引用

上一章节介绍了正则表示分组圆括号 “()” 的用法,本章节将介绍怎样引用我们创建的分组。

在之前使用圆括号的过程中,与位于圆开括号和圆闭括号之间的模式匹配的内容都会被捕获。例如:

(hello)( )(world)

匹配信息如下图:

上图中,模式定义了三个分组,将被捕获的分组指定给变量 $1、$2 和 $3

分组编号

捕获分组的编号是有圆括号在正则表达式中的位置决定。

例如:在使用下面的模式:

(hello)( )(world)

匹配下面的文本时:

hello world

字符序列 hello(它位于第一个圆开括号之后) 就是变量 $1 的值;而字符序列 “ ” 空格(它位于第二个圆开括号)是变量 $2 的值;字符序列 world(它位于第三个圆开括号之后) 就是变量 $3 的值;匹配结果如下图:

上图中,Group 1 表示 $1,Group 2 表示 $2,Group 3 表示 $3。

如果圆括号之间存在嵌套呢?该如何确定分组编号,如下:

(((hello)( ))((world)\.?))

上面模式将创建6个分组,如下图:

引用分组

还是以前面的模式(“(hello)( )(world)”)为例,将文本 “hello world” 替换成 “hello_world” 文本。如下图:

上图中,替换表达式 “$3_$1” 将分别引用 $3 和 $1 分组。

如果在一个模式中有分组被命名,那么你还可以重用该命名分组。假如有如下文本:

hello_world_hello

使用下面模式匹配该文本前面的 “hello” 文本。如下:

(?<g1>hello)

然后你可以再使用该分组,如下:

(?<g1>hello)_[a-z]+_\k<g1>

运行结果如下图:

或者(Ruby 支持)

(?<g1>hello)_[a-z]+_\k'g1'

运行结果如下图:

或者(Ruby 支持)

(?<g1>hello)_[a-z]+_\g<g1>

运行结果如下图:

命名分组的语法:

语法 描述
(?<name>...)命名分组
(?name...)另一种命名分组的方式
(?P<name>...)Python 中的命名分组
\k<name>在 Perl 中引用分组名
\k'name'在 Perl 中引用分组名
\g{name}在 Perl 中引用分组名
\k{name}在 .NET 中引用分组名
(?P=name)在 Python 中引用分组名
说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号