正则表达式匹配规则

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式匹配规则相关的知识,希望对你有一定的参考价值。

参考技术A 本文介绍的并不是正则表达式的通配符含义,或者一些正则的书写技巧
而是介绍正则匹配的流程,正则进行匹配的规则

例如字符串:abcde
这个时候位置关系如下

分为两种
①是普通匹配,普通匹配占宽度,匹配的是字符
②是断言,断言不占宽度,匹配的是某一个位置,所以断言也被叫做零宽度断言。

例如表达式:/\w(?=\d)/
首先表达式拆解为 \w 与 (?=\d) 两个部分,
表达式 \w 匹配一个字符,占用一个宽度,(?=\d) 表示一个数字的位置
整个正则表达式连接起来就是,首先匹配一个字母或者数字 \w,匹配的这个 \w 后面必须紧跟一个数字 (?=\d)
这里的 \w 为普通匹配,占用宽度,而 (?=\d) 为断言,并不占用宽度,只是规定 \w 后面必须含有一个数字

看一下使用上面这个表达书进行匹配的结果

断言由于不占宽度所以match的结果只有字符'c'

联系第 1 点和第 2 点
例如我们有一个正则表达式,和一个需要进行匹配的字符串

首先对字符串位置做标记,方便我们观察

同样的,我们对正则表达式 /bc/g 进行拆解为 b 与 c 两部分

匹配的过程如下:

①当正则匹配不成功的时候,就会尝试进行回溯
②回溯成功与否取决于是否有可回溯的位置
③若没有会回溯位置,则整个正则表达式匹配失败,控制权交还给表达式的起始位置
④正则规则中使用量词修饰,或者使用|的时候,所匹配的位置为可回溯位置

依旧是一个简单的例子

依旧对正则进行拆解,拆解成 a,b1,3,b,b,c 五部分
依旧按照之前的规则进行匹配

①正则匹配规则 a, b1,3, b, b, c 分别匹配到了字符 a, b, b, b, c
②整个过程中由于 b1,3 存在可回溯位置,正则默认匹配规则为贪婪模式,b1,3 首先尽可能多的匹配,直到无法继续匹配的时候将控制权移交给下一个匹配字符
③当之后的匹配字符匹配失败的时候,正则表达式尝试从可回溯位置开始进行匹配,如果匹配依旧失败的话,再往前找上一个可回溯位置,直到表达式匹配成功
④如果已经没有任何可回溯位置能满足表达式,则整个表达式匹配失败,它将从上次匹配字符串的开始位置的下一个位置再次尝试匹配

正则默认为贪婪模式,
贪婪模式为尽可能多的匹配,但是非贪婪莫模式不能只解释为尽可能少的匹配

这个时候确实可以理解为尽可能少的匹配

再看一个例子

这个时候如果按照尽可能少的匹配的原则,匹配到的应该是['d1']
所以不能单纯的理解为尽可能少的匹配

表达式拆解为 [a-z]1,5 与 1 两部分

Python 正则表达式规则

正则表达式的一些匹配规则:

. :用于匹配任意一个字符,如 a.c 可以匹配 abc 、aac 、akc 等
^ :用于匹配以...开头的字符,如 ^abc 可以匹配 abcde 、abcc 、abcak 等
$ :用于匹配以...结尾的字符,如 abc$ 可以匹配 xxxabc 、123abc 等
* :匹配前一个字符零次或多次,如 abc* 可以匹配 ab 、abc 、abcccc 等
+ :匹配前一个字符一次或多次,如 abc+ 可以匹配 abc 、abcc 、abcccc 等
? :匹配前一个字符零次或一次,如 abc? 只能匹配到 ab 和 abc
转义字符,比如我想匹配 a.c ,应该写成 a.c ,否则 . 会被当成匹配字符
| :表示左右表达式任意匹配一个,如 aaa|bbb 可以匹配 aaa 也可以匹配 bbb
[]:匹配中括号中的任意一个字符,如 a[bc]d 可以匹配 abd 和 acd,也可以写一个范围,如 [0-9] 、[a-z] 等
():被括起来的表达式将作为一个分组,如 (abc){2} 可以匹配 abcabc ,a(123|456)b 可以匹配 a123b 或 a456b
{m}:表示匹配前一个字符m次,如 ab{2}c 可以匹配 abbc
{m,n}:表示匹配前一个字符 m 至 n 次,如 ab{1,2}c 可以匹配 abc 或 abbc
d :匹配数字,如 adc 可以匹配 a1c 、a2c 、a3c 等
D :匹配非数字,也就是除了数字之外的任意字符或符号,如 aDc 可以匹配 abc 、aac 、a.c 等
s :匹配空白字符,也就是匹配空格、换行符、制表符等等,如 asc 可以匹配 ‘a c‘ 、a c 、a c 等
S :匹配非空白字符,也就是匹配空格、换行符、制表符等之外的其他任意字符或符号,如 aSc 表示除了 ‘a c‘ 之外都能匹配,abc 、a3c 、a.c 等
w :匹配大小写字母和数字,也就是匹配 [a-zA-Z0-9] 中的字符,如 awc 可以匹配 abc 、aBc 、a2c 等
W :匹配非大小写字母和数字,也就是匹配大小写字母和数字之外的其他任意字符或符号,如 aWc 可以匹配 a.c 、a#c 、a+c 等

 

 

 

 

 

    

    

以上是关于正则表达式匹配规则的主要内容,如果未能解决你的问题,请参考以下文章

Python 正则表达式规则

正则表达式匹配规则及示例

正则表达式

正则表达式常用规则与应用

兄弟连学Python(06)---- 正则表达式匹配规则

正则表达式