正则 捕获组(capture group)_正则表达式

捕获组有两种形式

一种是普通的捕获组,不产生歧义的情况下,后面简称捕获组,语法规则:(expression);

另一种是命名捕获组,语法规则:(?<name>expression)或者(?'name'expression),这两种写法是等价的。

 

1、编号规则

如果没有显式为捕获组命名,即没有使用命名捕获组,那么需要按数字顺序来访问所有捕获组

在只有普通捕获组的情况下,捕获组的编号是按照“(”出现的顺序,从左到右编号的 

 

(\d{4})-(\d{2}-(\d\d))

1        1 2          3    3 2

 

上面的正则表达式可以用来匹配格式为yyyy-MM-dd的日期,为了在下表中得以区分,采用了\d{2}和\d\d两种写法

还有一个默认编号为0的组,表示的是正则表达式的整体

用以上正则表达式匹配字符串:2008-12-31

匹配结果为:

编号 命名 捕获组 匹配内容
0   (\d{4})-(\d{2}-(\d\d)) 2008-12-31
1   (\d{4}) 2008
2   (\d{2}-(\d\d)) 12-31
3   (\d\d) 31

 

如果对组进行了显式命名,即命名捕获组,那么捕获的内容可以通过组名称来引用

但是如果正则表达式中既使用了普通捕获组,也使用了命名捕获组,那么捕获组的编号就要特别注意,编号的规则是先对普通捕获组进行编号,再对命名捕获组进行编号

 

(\d{4})-(?<date>\d{2}-(\d\d))

1        1 3                       2     23

 

用以上正则表达式匹配字符串:2008-12-31

匹配结果为:

编号 命名 捕获组 匹配内容
0   (\d{4})-(\d{2}-(\d\d)) 2008-12-31
1   (\d{4}) 2008
2   (\d\d) 31
3 date (?<date>\d{2}-(\d\d)) 12-31

 

 

2、捕获组的引用

对捕获组的引用一般有以下几种

a) 正则表达式中,对前面捕获组捕获的内容进行引用,称为反向引用

b) 正则表达式中,(?(表达式)true|false)的条件表达式

c) 在程序中,对捕获组捕获内容的引用

 

反向引用

对于普通捕获组的引用,语法规则为:\k<num>,通常简写为\num,其中num是十进制的数字,即捕获组的编号

对于命名捕获组的引用,语法规则为:\k<name>或者\k'name'

时间: 2024-11-18 22:35:50

正则 捕获组(capture group)_正则表达式的相关文章

正则 捕获组(capture group)

捕获组有两种形式 一种是普通的捕获组,不产生歧义的情况下,后面简称捕获组,语法规则:(expression): 另一种是命名捕获组,语法规则:(?<name>expression)或者(?'name'expression),这两种写法是等价的.   1.编号规则 如果没有显式为捕获组命名,即没有使用命名捕获组,那么需要按数字顺序来访问所有捕获组 在只有普通捕获组的情况下,捕获组的编号是按照"("出现的顺序,从左到右编号的    (\d{4})-(\d{2}-(\d\d))

又一不错的应用-正则来查找替换字符串_正则表达式

以下这段代码截取自某一网页源码: onClick="MM_openBrWindow('../photo/nlife/sfc/pages/O'Connors_jpg.htm','RD','width=456,height=368')" onClick="MM_openBrWindow('../photo/nlife/sfc/pages/Trad'r Sam_jpg.htm','RD','width=456,height=368')" onClick="MM_

PHP 正则的使用基础入门_正则表达式

我的正则入门,是起源于网上的一篇文章[1],这篇文章由浅入深的阐述了正则使用的方法,我觉得是一个很好的入门材料,不过学成还是要靠个人,在使用的过程中,还是会不断地忘记,因此反反复复的阅读了这篇文章有四五遍,对于其中一些比较困难的知识点,甚至要用很久才能消化,但是只要能见坚持着看完,你会发现自己对于正则的运用能力就会显著提高. 正则表达式: 用于描述字符排列和匹配模式的一种语法规则.它主要用于字符串的模式分割.匹配.查找及替换操作. PHP中的正则函数: php中有两套正则函数,两者功能差不多,分

PHP 正则 email语句详解_正则表达式

复制代码 代码如下: <?php if (eregi("^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3}$",$email)) { echo "您的 E-Mail 通过初步检查"; } ?> 在这句话里,首先是应用了一个eregi函数,这个函数还算好理解.随便找本书,就能给你一段解释: 语法: int ereg(string pattern, string string, array [regs]); 返回值:

Javascript使用正则验证身份证号(简单)_正则表达式

身份证为15位或者18位,15位的全为数字,18位的前17位为数字,最后一位为数字或者大写字母"X". 与之匹配的正则表达式: (^\d{15}$)|(^\d{17}([0-9]|X)$) 下面以Javascript为例进行说明: functionisIdCardNo(num) { num = num.toUpperCase(); //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X. if ( !(/(^\d{15}$)|(^

JS 正则表达式的相关方法(正则学习笔记1)_正则表达式

复制代码 代码如下: var str="abcdefghijklnabcdefghijklmnabcabdefghijklmn"; re=/a/g; alert(re.test(str)); //test方法调用返回 true false 表示是否在指定字符串找到匹配的字符--true alert(re.exec(str)); //返回字符串中匹配表达式的第一个字符串 --a alert(str.match(re)); //返回一个数组,每一项都匹配表达式的数组---[a,a,a] 注

Dreamweaver 正则替换(返回调用值)_正则表达式

例1: List-j/1100.aspx --> List.aspx?id=1100 List-j/(\d+).aspx --> List.aspx?id=$1 例2: List.aspx?id=1100 --> List-j/1100.aspx List.aspx\?jt=(\d+) --> List-j/$1.aspx (注:" List.aspx?id=1100"中出现"?"需转义)

php正则之函数 preg_replace()参数说明_正则表达式

preg_replace 字符串比对解析并取代.  语法: mixed preg_replace(mixed pattern, mixed replacement, mixed subject);  返回值: 混合类型资料  函数种类: 资料处理  内容说明  本函数以 pattern 的规则来解析比对字符串 subject,欲取而代之的字符串为参数 replacement.返回值为混合类型资料,为取代后的字符串结果.  使用范例  下例返回值为 $startDate = 6/19/1969 复

javascript下正则匹配百分比的代码_正则表达式

<script language="javascript">     var re = /^-?\d+%$/;     alert(re.test('50%'));     alert(re.test('-25%'));     alert(re.test('3a5%')); </script>