博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
正则表达式(进阶篇)
阅读量:5071 次
发布时间:2019-06-12

本文共 1439 字,大约阅读时间需要 4 分钟。

后向引用  分组进阶

分组标号

使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以在表达式或其它程序中作进一步的处理。默认情况下,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。

\b(\w+)\b\s+\1\b   //表示重复的两个单词

\1    //表示第一个分组的东西

?:    //可以剥夺对分组权利的分配

 

分组捕获

(exp)    //创建一个分组,捕获文本到自动命名的分组里

(?<name>exp)或者(?'name'exp)    //创建一个命名的分组,捕获文本到name名称的分组里

(?:exp)    //匹配exp,不捕获也不给分组分配编号

 

零宽断言和负向零宽断言

 (?=exp)     //匹配表达式前边的位置//例如  \b\w+(?=ing\b)  匹配ing结尾的单词   breaking popping  则会匹配到break和popp

 (?<=exp)     //匹配表达式后边的位置//例如  \b(?<=re)\w+\b  匹配re开头的单词  reference和rebook 则会匹配ference和book

 (?!exp)     //匹配表达式前边的位置//例如  \b\w+(?=ing\b)  匹配不以ing结尾的单词

 (?<!exp)     //匹配表达式后边的位置//例如  \b(?<=re)\w+\b  匹配不以re开头的单词

 

 注释

 (?#comment)    //进行注释  2[0-4]\d(?#200-249)|25[0-5](?#250-255)|[01]?\d\d?(?#0-199)

 

贪婪与懒惰

当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。以这个表达式为例:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。

有时,我们更需要懒惰匹配,也就是匹配尽可能少的字符。前面给出的限定符都可以被转化为懒惰匹配模式,只要在它后面加上一个问号?。这样.*?就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。

注意定义懒惰为:使整个匹配成功的前提下使用最少的重复

 

处理选项

上边的耐心看完意思其实就是igm这仨字母

平衡组和递归匹配

看到这里已经到了最后一个概念了,这个概念肯定相对陌生很多。

举个例子((1+2+3)*(3+5)/(2+1+(3+3)/2))

这里边有好多的相对的括号,那么可以说他们互相平衡了。就称之为平衡组,

 运用前边学的给分组命名的知识,那么希望一个分组开始一个结束的话,那么就一个命名的分组在结束时给一个负号的分组命名推出,这样就可以达到平衡

    • (?'group')           //把捕获的内容命名为group,并压入堆栈(Stack)
    • (?'-group')                 //从堆栈上弹出最后压入堆栈的名为group的捕获内容,如果堆栈本来为空,则本分组的匹配失败
    • (?(group)yes|no)    //如果堆栈上存在以名为group的捕获内容的话,继续匹配yes部分的表达式,否则继续匹配no部分

 

 没有提到的知识点

 

 

转载于:https://www.cnblogs.com/sowhite/p/6358025.html

你可能感兴趣的文章
洛谷 [P1948] 电话线
查看>>
MM主要的表和主要字段
查看>>
数据验证随想
查看>>
k8s etcd 集群配置安装
查看>>
SQL反模式学习笔记16 使用随机数排序
查看>>
MySQL_第一部基础入门
查看>>
XML 树结构,语法规则,元素,属性,验证及其解析
查看>>
hdu 4850 Wow! Such String!(欧拉回路)
查看>>
rlwrap(在sqlplus下使用上下键)
查看>>
重新初始化VS2010
查看>>
TCP的ACK确认系列 — 延迟确认
查看>>
uboot的FIT功能
查看>>
ZkApi的方法跨域访问ZkResource的静态资源文件出现的问题
查看>>
ZendStudio快捷键 注释的快捷键
查看>>
Headfirst设计模式的C++实现——迭代器(Iterator)
查看>>
Unity图形功能的硬件要求 Hardware Requirements for Unity's Graphics Features
查看>>
CellClick点击一行,左边编辑数据绑定
查看>>
iOS学习笔记
查看>>
easyui的combobox/combogrid检索
查看>>
GRASP软件设计的模式和原则
查看>>