正则表达式(已同步动csdn)
基本概念
不同的正则表达式引擎有不同的语法,但是概念是一样的,所以我们要先掌握基本的概念。
概念理解
- 单行,多行模式
单行匹配模式中一些字符表达的含义就不一样了
例如^$表示开头和结尾,.不可以匹配换行符,此时想要匹配所有字符可以使用[\S\s]或者[\d\D]之类的补集形成全集
多行模式中^$只能匹配到行的开头和结尾,.也能匹配换行符了(注意某些引擎需要开启DOTALL)
- 匹配项和捕获组
匹配项就是我们写的正则表达式匹配到的整个字符串
例如, a12345645kkkl2301 通过 [a-z](\d{3}) 的匹配项是 a123 和 k123 我们此时可以通过捕获组对匹配项进行更细致的提取1号捕获组就是123
- 零宽度语法
当我们后面的匹配项的标志字符被前面的字符串匹配了会怎么样?
后面的匹配项就丢失了结构字符串,没法被匹配
例如:
a123b123c123d
我们想匹配 被字母夹住的字符串
这样写 [a-z].+?[a-z]
第一个匹配项没问题 a123b
但是现在第一个匹配项匹配之后目标字符串实际上待匹配的字符是123c123d
发现丢失了b123c
可能会想到将b还回去,通过非捕获组?
实际上影响是否将字符还回去的操作不是捕获组,因为捕获组是在匹配项再进行的操作,所以不会改变匹配项
我们有种语法叫做零宽度,就是将匹配到的字符串还回去,不占用后续匹配项的字符
正则表达式(已同步动csdn)
https://wainyz.online/wainyz/2024/05/16/正则表达式(已同步动csdn)/