正则表达式基础
正则表达式 - 唯熟于心方能随心所欲
Regular expression
对象: 文本
作用: 模式匹配
引擎: DFA(表达式主导), NFA(文本主导), POSIX NFA
- 字面字符(literal)直接匹配字符串
regex 匹配regex - 非可见字符转义
- \cx 匹配由 x([a-zA-Z]) 指示的控制字符
- \f 换页符匹配(\x0c和\cL)
- \n 换行符匹配(\x0a和\cJ)
- \r 匹配一个回车符(\x0d和\cM)
- \t 制表符匹配 (\x09和\cI)
- \v 垂直制表符匹配(\x0b和\cK)
- 用特殊字符表示字符集合
- . 匹配任何字符(换行符除外)
- [...] 匹配字符组里出现的任意一个字符
- [^...] 不匹配字符组里出现的任意一个字符
- [x-y] 匹配从字符x(ascii)到y(ascii)间的任意一个字符
- \d 匹配任何数字 [0-9] digit
- \D 匹配任何非数字[^0-9] \d反义
- \w 匹配任何数字和字母字符 [A-Za-z0-9] word
- \W 匹配任何非数字和字母字符[^A-Za-z0-9] \w反义
- \s 匹配任何空白符 [ \n\t\r\v\f] spaces
- \S 匹配任何非空白符[^\n\t\r\v\f] \s反义
- 定位符
- \A 匹配字符串的开始
- \Z 匹配字符串的结束
- \b 匹配单词边界 boundary
- \B 匹配非单词边界 \b反义
- ^ 匹配字符串的开始
- $ 匹配字符串的结尾
- 匹配次数(闭包操作符)
- {N} 匹配前面出现的正则表达式N次
- {M,N} 匹配前面出现的正则表达式M次到N次
- * 匹配前面出现的正则表达式零次或多次
- + 匹配前面出现的正则表达式一次或多次
- ? 匹配前面出现的正则表达式零次或一次
- 多个正则表达式组合
- | 或 将多个表达式组合成一个
- 匹配特殊字符
- \c 匹配特殊字符c 特殊字符 .='.' \='' *='*'
- 组建组
- () 分组和匹配子组
- \num num 子组编号,从1开始
- 零宽断言与负向零宽
有点类似定位符,匹配返回的结果不包含断言部分,也就是零宽度- (?=exp) 零宽度正预测先行断言 位置后匹配
- (?<=exp) 叫零宽度正回顾后发断言 位置前位置(<小于号看样子就是向左的意思)
- (?=!exp) 零宽度负预测先行断言 位置后不匹配
- (?<!exp) 零宽度负回顾后发断言 位置前不匹配
- 其它
在使用中很多语言还对正则做了些扩展等,如Python- (?iLmsux) 指定编译选项
- i 忽略大小写 ignorecase
- L 字符集本地化 Local
- m 多行匹配 multiline
- s '.'号将匹配所有的字符(包括\n) dotall
- u \w, \W, \b, \B, \d, \D, \s, \S 都将使用unicode
- x verbose 忽略表达式空白并支持#注释
- (?:...) 非捕获组,就是说去掉()的分组功能,仅当括号使用
- (?P
...) 命名一个组 - (?P=name) 使用一个命名组
- (?#...) 注释
- (?( id/name ) Y|N ) 如果id或name指定的组匹配成功则执行Y规则,否则执行N规则
- (?iLmsux) 指定编译选项
用文本去描述所有文本就是这么简单
简单的哲学,以最简单的方式完成思想的表达,用思想去简化思想,用文字表达思想

浙公网安备 33010602011771号