正则表达式笔记

POSIX字符集

[:space:] 所有空白字符(新行,空格,制表符)[\t\r\n\v\f]

[:digit:] 数字

[:xdigit:] 任何一个十六进制数(即:0-9,a-f,A-F)

[:punct:] 所有标点符号

[:alpha:] 所有的字母 包括汉字

[:upper:] 所有的大写字母

[:lower:] 所有的小写字母

[:alnum:] 字母和数字 相当于[0-9a-zA-Z] 包括汉字

[:cntrl:] 控制字符 [\x00-\x1F\x7F]

[:print:] 非空字符 类似[:graph:] 但包括空白字符 [\x20-x7E]

[:graph:] 空白字符之外的字符 [\x21-\x7E](非空格、控制字符)

[:blank:] 空格(space)与定位符(tab)

[:ascii:] ASCII 字符 [\x00-\x7F]

正则表达之环视(Lookaround)

(?<=Expression) 逆序肯定环视,表示所在位置左侧能够匹配Expression

(?<!Expression) 逆序否定环视,表示所在位置左侧不能匹配Expression

(?=Expression) 顺序肯定环视,表示所在位置右侧能够匹配Expression

(?!Expression) 顺序否定环视,表示所在位置右侧不能匹配Expression

环视是正则中的一个难点,对于环视的理解,可以从应用和原理两个角度理解,如果想理解得更清晰、深入一些,还是从原理的角度理解好一些,正则匹配基本原理参考 NFA引擎匹配原理。

上面提到环视相当于对“所在位置”附加了一个条件,环视的难点在于找到这个“位置”,这一点解决了,环视也就没什么秘密可言了。

顺序环视匹配过程
对于顺序肯定环视(?=Expression)来说,当子表达式Expression匹配成功时,(?=Expression)匹配成功,并报告(?=Expression)匹配当前位置成功。

对于顺序否定环视(?!Expression)来说,当子表达式Expression匹配成功时,(?!Expression)匹配失败;当子表达式Expression匹配失败时,(?!Expression)匹配成功,并报告(?!Expression)匹配当前位置成功;