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

perl 正则表达式反向引用\g代表什么意思?

发布网友 发布时间:2022-04-23 05:25

我来回答

3个回答

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

这次给大家带来正则的回溯引用backreference如何使用,正则回溯引用backreference使用的注意事项有哪些,下面就是实战案例,一起来看一下。

在所有例子中正则表达式匹配结果包含在源文本中的【和】之间,有的例子会使用Java来实现,如果是java本身正则表达式的用法,会在相应的地方说明。所有java例子都在JDK1.6.0_13下测试通过。

一、问题引入

一个在HTML页面中匹配标题标签(H1—H6)的问题:

文本:

<body>
<h1>Welcome to my page</H1>
Content is pided into twosections:<br>
<h2>Introduction</h2>
Information about me.
<H2>Hobby</H2>
Information about my hobby.
<h2>This is invalid HTML</h3>
</body>

正则表达式:<[hH][1-6]>.*?</[hH][1-6]>

结果:

<body>
【<h1>Welcome to my page</H1>】Content is pided into twosections:<br>
【<h2>Introduction</h2>】Information about me.
【<H2>Hobby</H2>】Information about my hobby.
【<h2>This is invalid HTML</h3>】</body>

分析:模式<[hH][1-6]>匹配任何一级标题的开始标签,而且不区分大小写,在这个例子中它匹配到了<h1>、<h2>,</[hH][1-6]>匹配到了</h1>、</h2>、</h3>;这里使用了懒惰型元字符来匹配标签中的文本,否则会匹配到从第一个开始标签到最后一下结束标签之间的内容。但是从结果可以看出,有一个无效的标签也匹配上了,即<h2></h3>,它们根本不能配对。要解决这个问题,就需要使用到回溯引用(backreference)。

二、回溯引用匹配

回溯引用是指模式的后半部分引用在前半部分中定义的子表达式。至于子表达式的使用、划分和引用,在前面已经介绍过了。现在来解决前面的例子:

文本:

<body>
<h1>Welcome to my page</H1>
Content is pided into twosections:<br>
<h2>Introduction</h2>
Information about me.
<H2>Hobby</H2>
Information about my hobby.
<h2>This is invalid HTML</h3>
</body>

正则表达式:<[hH]([1-6])>.*?</[hH]1>

结果:

<body>
【<h1>Welcome to my page</H1>】Content is pided into twosections:<br>
【<h2>Introduction</h2>】Information about me.
【<H2>Hobby</H2>】Information about my hobby.
<h2>This is invalid HTML</h3>

分析:首先匹配开始标题标签的模式<[hH]([1-6])>,使用括号把[1-6]做为子表达式,而匹配结束标题标签模式为</[hH]1>,其中1表示引用第一个子表达式,即([1-6]),如果([1-6])匹配到的是1,那1也匹配到1,如果匹配到2,那1也匹配到2,所以最后一个无效的标题标签就不会被匹配到了。

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

推荐阅读:

正则怎样写才能匹配一组字符

正则的位置匹配使用详解

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

1.官网中的语法:
\g{name} Named backreference
表示后向匹配的意思

2.后向匹配,简单说就是:
匹配,前面已经查找过的某段内容,该段内容,是已经被括号包起来的,叫做组group,组的名字叫做name
你这里就是
之前用

(?<last_name>\S+)
匹配到了
Flintstone
后面用
\g{last_name}
去匹配,前面的那个
Flintstone

所以,如果去掉,你这段匹配的语法,就和实际字符串,不吻合了。所以去掉就匹配不了了。
不过要注意的是,如果是去查找字符串,即使去掉,也可以匹配到前面那部分:
Fred Flintstone and Wilma


这下明白了吧?

关于后向匹配,更详细的解释,感兴趣的话去看:
(正则的含义是一样的,只是写法有点区别而已,所以可以参考的)

【教程】详解Python正则表达式之: (?<=…) positive lookbehind assertion 后向匹配 /后向断言

(此处不给贴地址,请自己用google搜标题,即可找到帖子地址)

热心网友 时间:2022-04-23 08:12

命名回溯,就是跟\1差不多,只不过是取了个名字last_name
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
武汉市实施《中华人民共和国残疾人保障法》办法第六章 劳动就业_百度... 湖北省实施《中华人民共和国残疾人保障法》办法第三章 康复 湖北省实施《中华人民共和国残疾人保障法》办法第四章 教育 湖北省实施《中华人民共和国残疾人保障法》办法第七章 无障碍环境_百 ... 湖北省实施《中华人民共和国残疾人保障法》办法第六章 文化生活_百度... 冬天如何钓草鱼在鱼塘 ...晋江末世女配文,女主是穿越到一本末世小说里面的知道... 河蚌怎么养(买了很多河蚌也吃不完) 合肥90平装修价格多少 黄瓜394千克萝卜385千克两种蔬菜共约800千克对吗? 老年人血小板减少的原因是什么? win7怎么把字体不安装在c盘啊,具体点啊 本人住院病人,由于不能下床,只能在床上解决大小便。小便为何要用尽全力排还排不尽?吃什么可以减少大便 win7系统的字体文件在哪里? 三高病人血压突然降低是什么原因引起的? 患者嗜睡但是胃口好,却暴瘦是什么原因? 与前次住院原因相同,且前次出院与下次入院间隔未超过30天的再一次住院视为同一次住院,是什么意思呢? 癌症患者为什么会感到疲乏无力?该如何开导他们? 肺栓塞患者血小板重度减少会有什么原因 我最爱的女朋友住院了,医生说是白血球减少,请问什么原因会导致白血球减少?求你们了. 《海王》里的女主角你觉得漂亮吗? 神经炎病人住院血小板减少的原因 如何在正则表达式反向引用需要做回溯 武术安全协议书怎么写 古人的称谓背后的文化观念 最权文学常识 “褫夺公权”中的“褫”怎么解释 允执厥中理解 搜狗浏览器左下有个红底白色的十字,怎么卸载? 我的桌面一开始只有个搜狗浏览器的,现在又多了个IE图标!删都删除不了!怎么办? window10怎么分区 50帕斯卡的物理意义是什么 1pa的物理意义是什么 800pa表示的物理意义是 帕斯卡在物理学和哲学领域的贡献对后世产生了怎样的影响? 作用在某物体上的压强是100帕斯卡,它表示的物理意义是 请问怎么用R语言正则表达式统计文章的单词数和中文字数,不能用程序包? 我体内寒湿晚上能喝姜水吗 体内寒湿晚上喝姜水好吗 姜水可以晚上喝吗?体寒的人也不可以晚上喝姜水吗?有没有科学点的回 早上喝姜水晚上运动半小时睡前姜水泡脚对体寒的人来说好吗 本人寒湿体质,一喝冷饮吹空调就全身酸痛。有没有什么办法能根治?喝姜水有用吗? 胃寒的人喝姜水好还是桂皮水好? 为什么喝姜水会打嗝(脾胃寒湿)胃寒狠厉害 我用淘宝电影app买了一张3天之后的电影票,但因为特殊原因我去不了了,我可以退票吗,有人退过吗 我用支付宝买个电影票,没取票,能退吗,时间还没到 淘宝电影申请退票无忧后取票最终还能退款吗 随着短视频的兴起火了很多的美食,但是这些“网红美食”周期为何很短? 湖北那里有适合短期女士住宿寺庙想去住几天,洗涤心灵,让心静下来,忏悔自己_百度问一问 谁去过武汉宝通寺的防疫站的,办健康证的流程和要求有哪些