问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

正则表达式分组匹配

发布网友 发布时间:2022-04-29 01:23

我来回答

2个回答

懂视网 时间:2022-04-23 09:40

这次给大家带来正则表达式分组的详解(附代码),正则表达式分组的注意事项有哪些,下面就是实战案例,一起来看一下。

正则表达式分组:
如果想匹配3个数字,正则表达式可以用如下写法:

d{3}

以上代码使用重复量词可以匹配3位数字。
但是在实际应用中,往往需要重复多个字符,例如我想重复ab两个字符,使用以下代码就不合适了,代码如下:

ab{3}

以上正则表达式只能够重复3次b。
为了实现重复多个字符可以使用小括号来指定子表达式或者说分组来实现此功能,例如:

(ab){3}

上面的正则就可以重复ab了。
所谓的分组就是使用小括号将一些项包括起来,使其成为独立的逻辑域,那么就可以像处理一个独立单元一样去处理小括号的内容。

下面看一段代码实例:

(d{1,3}.){3}d{1,3}

上面是一个简单的ip匹配正则表达式。由小括号包裹的内容会被作为一个独立的逻辑域进行操作。
分组的作用:
在正则表达式中,分组具有举足轻重的作用,下面就简单对它的功能做一下简单的介绍。

一.起到原始的分组作用:

把单独的项目进行分组,以便合成子表达式,这样就可以像处理一个单独的字符那样,对其应用|、+、*或者?等元字符来操作它们。
实例代码如下:

var str="I love javascript and java";
console.log(str.match(/java(script)?/gi));

由以上代码的运行结果可以看出,正则表达式既可以匹配字符串javascript也可以匹配java,这是因在正则表达式中采用了分组,并且使用重复量词?,可以使前面的子表达式重复0次或者1次。

二.定义子模式:

分组另一个非常重要的作用就是在完整的模式中定义子模式。
当一个正则表达式成功的和目标字符串相匹配时,可以从目标字符串中抽出和小括号中字表达式相匹配的部分。
假如我们匹配的是以一个数字开头的后面跟着一个或者多个不区分大小写的字母的字符串,正则表达式可以这样写:

/d[a-zA-Z]+/

假如我们真正关心和需要的是开头的数字,那么就可以将正则表达式的数字部分放入小括号就可以从检索到的匹配中抽取数字.

/(d)[a-zA-Z]+/

三.引用子表达式:
正则表达语法中可以在同一个表达式中的后部引用前面的子表达式。这是通过在""后面跟随数字实现的。此数字指定了小括号字表达式在正则表达式中的位置,例如1是引用的第一个带有圆括号的子表达式,自然2就是第二个带有圆括号的子表达式。
特别注意:由于子表达式是可以相互嵌套的,那么计算子表达式的位置的时候,只要确定左括号的位置即可。例如:

/(java(script))/

在以上正则表达式中,嵌套的子表示是可以用2表示。
对于子表达式的引用,并不是引用的匹配模式,而是对子表示匹配内容的引用。一般来说对子表达式的引用一般是用来实施一条约束,看下面的代码:

/(['"])[^'"]*1/

通常情况下左右引号是相匹配的,如果前面是双引号,那么结尾也要是双引号,前面是单引号那么结尾也必须是单引号,并且字符串中间不能够再出现其他的引号,例如:

"脚本之家欢迎您"
'脚本之家欢迎您'

那么上面的正则表达式就实现此功能,当前面的子表达式匹配单引号的时候,那么后面的1也就表示的是单引号,如果子表示匹配的双引号,那么后面的2就表示的是双引号。
非引用型分组:
分组会占用一定的系统资源,尤其是正则表达式较长的时候会降低匹配速度。有时候仅仅是为了设置一个分组,并不需要引用,那么使用非引用类型分组将会是一个良好的选择。

/(java(?:script))/

相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

推荐阅读:

JS里怎么用正则将字符串中的多个空格替换为一个空格

在PHP里使用正则的效率 贪婪、非贪婪与回溯详解(附代码)

热心网友 时间:2022-04-23 06:48

System.out.println(Arrays.toString("(a
and
b)
or
c".split("(and)|(or)")));
直接用split
就行了,那个小括号你自己处理吧。
运行结果为
[(a
,
b)
,
c]
分成了三份
[(a
,
b)
,
c]
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果电脑电池充不进电苹果电脑充不进去电是怎么回事 苹果电脑不充电没反应苹果电脑充电指示灯不亮充不了电怎么办 狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? 河南免费师范生的录取分数线多少? 河南省师范大学录取分数线 2020郑州师范学院聋人录取分数线? 请问在羽绒服上缝袖章,你是怎么搞定的? 河南考生一本线上30分可以报哪些学校 郑州师范学院专科历年分数线 2020年郑州师范学院公费师范生理科在武陟县录取分数线是多少? NVIDIA控制面板管理3D设置里没有首选图形处理器。。(有图) 2020年郑州师范学院文科公费师范生在禹州市录取最低分数线是多少? 郑州师范学院美术生录取分数线2020 .twbk文件如何打开 RNA质量中260:230是什么意思 NanoDrop 2000 软件安装后不能识别仪器怎么办 关于微量紫外分光光度计的NanoDrop的问题 梦见半红半青枣在水盆漂这是啥意思 LV皮带85码是全长多少cm Windows11能装nanodrop软件吗? 昨晚梦到一棵枣树结满了青枣,我摘了一颗红枣准备吃,发现枣核的刺遍布了整个枣像刺一样! 上衣尺码85cm指的是什么 胸围85cm对应什么尺码? 郑州师范学院2019年免费师范生投挡分数线专科 华为盒子系统时间不对如何设置 郑州师范学院大专录取分数线 黑色羽绒服上面有一条橙色拼接 求一正则表达式写法,多个分组+匹配 羽绒服线缝的扣子怎样挪? 华为P9为什么老是提示系统时间错误设备时间和电脑上 正则表达式如何只匹配某分组名下的文本 常青藤剪下来以后怎么栽n 正则表达式 分组匹配数组json问题: perl 正则表达式中模式分组/y((.)(.)\3 \2) d\1/ 是怎么匹配的? 华为g610一c00桌面时间显示和实际时间不一样求解 华为e1308 时间同步失败 正则表达式 怎么替换匹配到的每个分组的值 华为网络ec2106v2出现时间同步失败 正则表达式的分组引用 华为p9通知栏时间和系统时间不一致 java正则表达式关于分组的问题,我能理解group(0)是匹配的全组 怎么用正则表达式匹配下面语句并将汉字部分分组? java正则表达式如何获取分组匹配内容