正则表达式匹配规则
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 等
以上是关于正则表达式匹配规则的主要内容,如果未能解决你的问题,请参考以下文章