200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 唐读笔记-正则表达式必知必会

唐读笔记-正则表达式必知必会

时间:2024-02-09 21:39:33

相关推荐

唐读笔记-正则表达式必知必会

一、匹配单个字符

1.1、匹配纯文本

匹配数量:根据正则表达式引擎确认返回第一个还是返回多个

大小写区分:正则表达式是区分字母大小写的

1.2、匹配任意字符

1.3、匹配特殊字符

【\.】对特殊字符.进行转义,匹配原始字符.

二、匹配一组字符

2.1、匹配多个字符中的某一个

2.2、利用字符集合区间

[A-Z]匹配从A到Z的所有大写字母,a-z匹配从a到z的所有小写字母,A-z匹配ASCII字符A到ASCII字符z的所有字母。

一定要避免尾字符小于它的首字符,例如[3-1],这种模式没有意义

2.3、取非匹配

这与逻辑非运算很相似,只是这里的操作数是字符集合而已。

【^】的效果将作用于给定字符集合里的所有字符或字符区间,而不是仅限于紧跟在^字符后面的那一个字符或字符区间。

三、使用元字符

3.1、对特殊字符进行转义

元字符是一些在正则表达式中有着特殊含义的字符,通过转义使元字符为匹配本身

任何元字符都可以通过给它加上一个反斜杠字符作为前缀来进行转义

3.2、匹配空白字符

3.3、匹配特定的字符类别

一些常用的字符集合可以用特殊元字符来代替,这些元字符匹配是某一类别的字符

匹配数字(与非数字)

匹配字母和数字(与非字母和数字)

匹配空白字符(与非空白字符)

用来匹配退格字符的【\b】元字符是一个特例

匹配十六进制或八进制

3.4、使用POSIX字符类

POSIX字符类是需要(但不是所有)正则表达式实现都支持的一种简写形式

JavaScript不支持在正则表达式中使用POSIX字符类

使用的模式以【[[】开头、以【]]】结束,这是POSIX字符所必须的

四、重复匹配

4.1、有多少个匹配

4.2、防止过度匹配

?、{n}、{m, n}都有重复次数的上限,其他的重复匹配语法在重复次数方面都没有上限值,有时会导致过度匹配的现象。

当惰性元字符后出现复数匹配项时,会选择距离最近的一个匹配项

五、位置匹配

5.1、单词边界限定符

\b匹配的是一个这样的位置,这个位置位于一个能够用来构成单次的字符(字母、数字和下划线,也就是\w相匹配的字符)

5.2、字符串边界限定符

六、使用子表达式

6.1、子表达式

提高可读性,各个子表达式都加上括号,例如(\d{1,3}\.){3}(\d{1,3})

6.2、子表达式的嵌套

子表达式允许多重嵌套,理论上没有限制,但应该遵循适可而止的原则

此处的示例,实际匹配结果为12.159.46.20,优先满足了\d{1,2}的匹配条件,将(2[0-4]\d)放到四个或判断的最前,可以调整优先级,但是此处案例作用是展示子表达式嵌套,改动必要性不大

((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))分别匹配:

一位或两位数字1开头的3位数字2开头的200-249的数字25开头的250-255的数字

七、回溯引用:前后一致匹配

7.1、回溯引用匹配

[ ]+匹配一个或多个空格

\w+在括号里面是一个子表达式

\1是一个回溯引用,它引用的正是前面划分出来的子表达式;当\w+匹配of时,\1匹配of

\1代表模式里的第一个子表达式,\2代表模式里的第二个子表达式...

需要实现里面\0可以用来匹配整个表达式

7.2、回溯引用在替换操作中的应用

回溯引用语法在不同的正则表达式实现里有很大差异,JavaScript需要用$来替代\;ColdFusion用户在查找和替换操作里都必须使用\。

八、前后查找

8.1、向前查找

向前查找指定了一个必须匹配但不再结果中返回的模式。向前查找实际就是一个子表达式。

向前查找(和向后查找)匹配本身其实是有返回结果的,只是这个结果的字节长度永远是0而已。因此前后查找操作有时也被称为零宽度匹配操作。任何一个子表达式都可以转换为一个向前查找表达式,只要给它加上一个?=前缀即可

8.2、向后查找

向后查找就是查找出现在被匹配文本之前的字符(但不消费它)

向前查找模式的长度是可变的,它们可以包含.和+之类的元字符,所以非常灵活;

而向后查找模式只能固定长度,这是一条几乎所有正则表达式实现都遵守的限制。

8.3、把向前查找和向后查找结合起来

提示:为减少歧义,应该对需要匹配的<做一下转义,(?<=<改为(?<=\<

8.4、对前后查找取非

向前查找和向后查找通常用来匹配文本,骑目的是为了确定将被返回为匹配结果的文本的位置,这种用法被称为正向前查找(positive lookahead)和正向后查找(positive lookbehind)。

负向前查找(negative lookahead)将向前查找不与给定模式相匹配的文本,负向后查找(negative lookbehind)将向后查找不与给定模式相匹配的文本。

九、嵌入条件

需要使用条件处理,并非所有的正则表达式实现都支持条件处理

9.1、正则表达式的条件

正则表达式里的条件要用?来定义

?匹配前一个字符或表达式,如果它存在的话

?=和?<=匹配前面或后面的文本 ,如果它存在的话

回溯引用条件

回溯引用编号不需要被转义,因此?(1)是正确的,?(\1)不正确(但后者通常也能工作)

前后查找条件

附录

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。