正则表达式--匹配提取的利器

1.1 什么是正则表达式

使用自定义的规则来及匹配、提取文本中想要的内容。它的灵活性、功能性以及逻辑性非常强,可以迅速的用极其简单的方式
,达到控制复杂字符串的目的

1.2 元字符
元字符 含义
. 匹配任意1个字符,除\n
\b 匹配一个位置,
\d 表示匹配一个数字,即0-9
\D 表示匹配一个非数字,即不是数字
\s 表示匹配一个空白字符,即空格、tab键
\S 匹配一个非空白字符
\w 匹配一个非特殊字符,即a-z、A-Z、0-9、_、汉字
\W 匹配一个特殊字符,即非字母、非数字、非汉字
1.2.1 试用元字符

场景1:匹配9位qq号
\d\d\d\d\d\d\d\d\d
场景2:匹配任意N个字符(换行符除外)
....................
场景3:匹配10个非特殊字符
\w\w\w\w\w\w\w\w\w\w

1.3 匹配量词
匹配量词 含义
* 匹配前一个字符出现0次或者无限次,即可有可无
+ 匹配前一个字符出现1次或者无限次,即至少有一次
? 匹配前一个字符出现1次或者0次,即要么有1次,要么没有
{m} 匹配前一个字符出现m次
{m,} 匹配前一个字符出现m次或更多次
{m,n} 匹配前一个字符出现m到n次
1.3.1 试用量词

场景1:匹配qq号
\d{5,11}
场景2:匹配至少一个,至多无限个任意字符(换行符除外)
.+

1.4 匹配开头和结尾
匹配开头和结尾 含义
^ 匹配以……开头的
$ 匹配以……结尾的
[^指定字符] 表示除了指定字符都匹配
1.4.1试用开头和结尾

场景1:匹配开头是3的字符串
^3
场景2:匹配结尾是q的字符串
q$

匹配分组

匹配分组 含义
| 匹配左右任意一个表达式
(ab) 表示将括号中字符作为一个分组
\num 表示引用分组num匹配到的字符串
(?P<name>) 表示分组起别名
?P=name 表示引用别名为name分组匹配到的字符串
(分组数据) 分组数据是从左到右的方式进行分配的,最左边的是第一个分组,以此类推

捕获和非捕获

捕获实际上就是正则匹配,但是经常和分组一起使用,所以也叫捕获组和非捕获组

1.捕获组

捕获组就是把正则表达式中子表达式匹配的内容,保存到内存中以数字编号或显示命名的组里,方便后面引用

  • 捕获组
    • 普通捕获组
    • 命名捕获组
1.1捕获组编号规则

编号规则指的是以数字为捕获组进行编号的规则,在普通捕获组或命名捕获组单独出现的正则表达式中,编号规则比较清晰,在普通捕获组与命名捕获组混合出现的正则表达式中,捕获组的编号规则稍显复杂
需要说明的是,存在编号为0的捕获组,指的是正则表达式整体,这一规则在支持捕获组的语言中,基本上都是适用的

1.2.1普通捕获组编号规则

如果没有显式为捕获组命名,即没有使用命名捕获组,那么需要按数字顺序来访问所有捕获组。在只有普通捕获组的情况下,捕获组的编号是按照'('出现的顺序,从左到右,从1开始编号
例如:(\d{4})-(\d{2}-(\d\d)) 匹配年月日

普通捕获组.png

编号 命名 捕获组 匹配内容
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
1.2.2命名捕获组编号规则

命名捕获组通过显式命名,可以通过组名方便的访问到指定的组,而不需要一个个的数编号,同时避免了在正则表达式扩展过程中,捕获组的增加或减少对引用结导致的不可控的问题
值得一提的是,命名捕获组也参与了编号,在只有命名捕获组的情况下,捕获组的编号也是按照'('出现的顺序,从左到右,从1开始编号
例如:(?<year>\d{4})-(?<date>\d{2}-(?<day>\d\d)) 匹配年月日

命名捕获组.png

编号 命名 捕获组 匹配内容
0 (\d{4})-(\d{2}-(\d\d)) 2008-12-31
1 year (?<year>\d{4}) 2008
2 date (?<date>\d{2}-(?<day>\d\d))) 12-31
3 day (?<day>\d\d) 31
1.2.3普通捕获组与命名捕获组混合编号规则

对于命名捕获组,可以随时使用组名进行访问,而对于普通捕获组,只能通过确定其编号后进行访问
编号的顺序:对于两种捕获组混合的正则表达式,首先会忽略命名捕获组,对普通捕获组进行编号,全部完成后,再对命名捕获组进行编号
例如:(\d{4})-(?<date>\d{2}-(\d\d))


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

零宽断言

用于查找在某些内容之前或者之后的东西,但是并不包括这些内容
可以理解为匹配位置,该位置满足的条件就是断言
正则表达式中只有当断言为真时才会继续进行匹配

1.零宽度正预测先行断言(?=exp匹配exp前面的位置),它断言自身出现的位置的后面能匹配表达式exp

例如:\b\w+(?=ing\b),匹配以ing结尾的单次的前面部分(除了ing以外的部分),如查找I'm singing while you're dancing.时,它会匹配sing和danc

2.零宽度正回顾后发断言(?<=exp),它断言自身出现的位置的前面能匹配表达式exp

例如:(?<=bre)\w+\b会匹配以re开头的单词开头的后半部分(除re以外的部分),如查找reading a book时,它会匹配ading

3.零宽度负预测先行断言(?!exp),它断言此位置的后面不能匹配表达式exp

例如:\d{3}(?!\d)匹配123456, \b((?!abc)\w)+\b匹配abcajsljnnasd ajskldjkaslj vcxjbj jojljklkasabclkajsdlk

4.零宽度负回顾后发断言(?<!exp),它来断言此位置的前面不能匹配表达式exp

例如:(?<![a-z])\d{7}匹配 sjdlkjdslkfaj12345671alkjsdljalk,7位数字前必须非小写字母

反向引用

捕获组捕获的数据会放到缓存区中,编号从1开始一直到99,可以使用 \num 来选择性的调用
反向引用的作用通常是用来查找或限定重复、查找或限定指定标识配对出现等等
例如:
表达式:(\w)((?=\1\1\1)(\1))+
字符串:aa bbb cccc ffffff eeeeeeee 999999999
匹配结果为:
cc
ffff
eeeeee
9999999

问题:
(\w)\10 中,末尾的\10代表的是捕获组第10个位置的索引,还是第1个位置的索引

贪婪和非贪婪

影响的是被两次修饰的子表达式的匹配行为。贪婪模式是在整个表达式匹配成功的前提下,尽可能多的匹配;相对的,非贪婪模式就是尽可能少的匹配。
属于贪婪模式的两次,也叫作匹配优先量词,包括:
“{m,n}”、“{m,}”、“?”、“”和“+”
在匹配优先量词后加上“?”,就变成非贪婪模式的两次,也叫做忽略优先量词,包括:
“{m,n}?”、“{m,}?”、“??”、“
?”和“+?”

反义


引用
百度百科
https://blog.csdn.net/josjiang1/article/details/80567922

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,539评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,594评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,871评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,963评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,984评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,763评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,468评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,850评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,002评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,144评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,823评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,483评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,026评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,150评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,415评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,092评论 2 355

推荐阅读更多精彩内容

  • .价格亲民 短视频带货属于感官刺激下的冲动式消费,因为用户刷抖音最大的目的是获得快乐、获取信息,而不是为了购物。 ...
    来呀呀阅读 185评论 0 0
  • 《香帅中国财富报告》 14丨2020年,中国的房子还能买吗?怎么买? 1、 从这一讲开始,我们进入报告的第三部分—...
    六安姐阅读 357评论 0 0
  • 【前言】:每天用你最喜欢的方式做你最喜欢的事情,这是一种莫大的幸福,然后,每天重复这种快乐的做事方式和做事心情,久...
    币圈监察者阅读 125评论 0 0
  • 黑色的海岛上悬着一轮又大又圆的明月,毫不嫌弃地把温柔的月色照在这寸草不生的小岛上。一个少年白衣白发,悠闲自如地倚坐...
    小水Vivian阅读 3,108评论 1 5
  • 渐变的面目拼图要我怎么拼? 我是疲乏了还是投降了? 不是不允许自己坠落, 我没有滴水不进的保护膜。 就是害怕变得面...
    闷热当乘凉阅读 4,246评论 0 13