正则表达式基础

正则表达式 - 唯熟于心方能随心所欲

Regular expression

对象: 文本
作用: 模式匹配
引擎: DFA(表达式主导), NFA(文本主导), POSIX NFA

  1. 字面字符(literal)直接匹配字符串
    regex 匹配regex
  2. 非可见字符转义
    • \cx 匹配由 x([a-zA-Z]) 指示的控制字符
    • \f 换页符匹配(\x0c和\cL)
    • \n 换行符匹配(\x0a和\cJ)
    • \r 匹配一个回车符(\x0d和\cM)
    • \t 制表符匹配 (\x09和\cI)
    • \v 垂直制表符匹配(\x0b和\cK)
  3. 用特殊字符表示字符集合
    • . 匹配任何字符(换行符除外)
    • [...] 匹配字符组里出现的任意一个字符
    • [^...] 不匹配字符组里出现的任意一个字符
    • [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反义
  4. 定位符
    • \A 匹配字符串的开始
    • \Z 匹配字符串的结束
    • \b 匹配单词边界 boundary
    • \B 匹配非单词边界 \b反义
    • ^ 匹配字符串的开始
    • $ 匹配字符串的结尾
  5. 匹配次数(闭包操作符)
    • {N} 匹配前面出现的正则表达式N次
    • {M,N} 匹配前面出现的正则表达式M次到N次
    • * 匹配前面出现的正则表达式零次或多次
    • + 匹配前面出现的正则表达式一次或多次
    • ? 匹配前面出现的正则表达式零次或一次
  6. 多个正则表达式组合
    • | 或 将多个表达式组合成一个
  7. 匹配特殊字符
    • \c 匹配特殊字符c 特殊字符 .='.' \='' *='*'
  8. 组建组
    • () 分组和匹配子组
    • \num num 子组编号,从1开始
  9. 零宽断言与负向零宽
    有点类似定位符,匹配返回的结果不包含断言部分,也就是零宽度
    • (?=exp) 零宽度正预测先行断言 位置后匹配
    • (?<=exp) 叫零宽度正回顾后发断言 位置前位置(<小于号看样子就是向左的意思)
    • (?=!exp) 零宽度负预测先行断言 位置后不匹配
    • (?<!exp) 零宽度负回顾后发断言 位置前不匹配
  10. 其它
    在使用中很多语言还对正则做了些扩展等,如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规则

用文本去描述所有文本就是这么简单
简单的哲学,以最简单的方式完成思想的表达,用思想去简化思想,用文字表达思想

posted @ 2016-05-23 11:17  梁田  阅读(121)  评论(0)    收藏  举报