正则表达式(已同步动csdn)

基本概念

不同的正则表达式引擎有不同的语法,但是概念是一样的,所以我们要先掌握基本的概念。

概念理解

  1. 单行,多行模式

单行匹配模式中一些字符表达的含义就不一样了

例如^$表示开头和结尾,.不可以匹配换行符,此时想要匹配所有字符可以使用[\S\s]或者[\d\D]之类的补集形成全集

多行模式中^$只能匹配到行的开头和结尾,.也能匹配换行符了(注意某些引擎需要开启DOTALL)

  1. 匹配项和捕获组

匹配项就是我们写的正则表达式匹配到的整个字符串

例如, a12345645kkkl2301 通过 [a-z](\d{3}) 的匹配项是 a123 和 k123 我们此时可以通过捕获组对匹配项进行更细致的提取1号捕获组就是123

  1. 零宽度语法

当我们后面的匹配项的标志字符被前面的字符串匹配了会怎么样?

后面的匹配项就丢失了结构字符串,没法被匹配

例如:

​ a123b123c123d

我们想匹配 被字母夹住的字符串

这样写 [a-z].+?[a-z]

第一个匹配项没问题 a123b

但是现在第一个匹配项匹配之后目标字符串实际上待匹配的字符是123c123d

发现丢失了b123c

可能会想到将b还回去,通过非捕获组?

实际上影响是否将字符还回去的操作不是捕获组,因为捕获组是在匹配项再进行的操作,所以不会改变匹配项

我们有种语法叫做零宽度,就是将匹配到的字符串还回去,不占用后续匹配项的字符


正则表达式(已同步动csdn)
https://wainyz.online/wainyz/2024/05/16/正则表达式(已同步动csdn)/
作者
wainyz
发布于
2024年5月16日
许可协议