1. 工具
    1. RegexBuddy
  2. 语法
    1. 字符
      1. 普通字符:字母、数字、汉字、下划线,匹配与之相同的一个字符
      2. 简单转义字符:\n(换行),\t(制表),\\(\本身)和 \^...(\^等有特殊作用的符号如要匹配自己的话要用转义)
      3. 标准字符集合
        1. \d
          1. 任意一个数字,0~9
        2. \w
          1. 任意一个字母、数字、汉字或下划线,A~Z、a~z、0~9、_和任意一个汉字
        3. \s
          1. 任意空白符,包括空格、制表符、换行符
        4. .
          1. 小数点可以匹配任意一个字符,换行除外(如果要匹配包括"\n"在内的所有字符,一般用[\s\S])
      4. 自定义字符集合
        1. [ab5@]
          1. 匹配"a"或"b"或"5"或"@"
        2. [^abc]
          1. 匹配a、b、c之外的任意字符
        3. [f-k]
          1. 匹配“f"到"k"之间的字符
        4. [^A-F0-3]
          1. 匹配“A"-"F","0"-"3"之外的任意一个字符
    2. 量词(Quantifier)
      1. {n}
        1. 表达式重复n次​
      2. {m,n}
        1. 表达式至少重复m次,最多重复n次
        2. 贪婪模式 (默认)
          1. 匹配符合的最长的字符串
        3. 非贪婪模式 (在量词后面加 ? 例:{m,n}? )
          1. 匹配符合的最长的字符串
      3. {m,}
        1. 表达式至少重复m次
        1. 匹配表达式0或1次,相当于{0,1}
      4. +
        1. 表达式至少出现一次,相当于{1,}
      5. *
        1. 表达式不出现或出现任意次,相当于{0,}
    3. 字符边界
      1. ^
        1. 与字符串开始的地方匹配
      2. $
        1. 与字符串结束的地方匹配
      3. \b
        1. 匹配一个单词的边界,当前位置前面的字符和后面的字符不全是\w
    4. 预搜索(零宽断言、环视)
      1. (?=exp)
        1. 断言自身出现的位置的后面能匹配表达式exp
      2. (?!exp)
        1. 断言自身出现的位置的后面不能匹配表达式exp
      3. (?<=exp)
        1. 断言自身出现的位置的前面能匹配表达式exp
      4. (?<!exp)
        1. 断言自身出现的位置的前面不能匹配表达式exp
    5. 匹配模式
      1. IGNORECASE 忽略大小写模式
        1. 匹配时忽略大小写
        2. 默认是区分大小写的
      2. SINGLELINE 单行模式
        1. 整个文本看作一个字符串,只有一个开头一个结尾
        2. 使小数点"."可以匹配包含换行符(\n)在内的任意字符
      3. MULTILINE 多行模式
        1. 每行都是一个字符串
        2. 在多行模式下,如果需要仅匹配字符串开始和结束位置,可以使用\A和\Z
    6. 选择符和分组
      1. | 分支结构​
        1. 左右表达式之间“或”关系,匹配左边或右边
      2. ( ) 捕获组
        1. (1)、在被修饰匹配次数的时候,括号中的表达式可以作为整体被修饰
        2. (2)、取匹配结果的时候,括号中的表达式匹配到的内容可以被单独得到
        3. (3)、每一对括号会分配一个编号,使用()的捕获根据左括号的顺序从1开始自动编号。捕获编号为零的第一个捕获是整个正则表达式模式匹配的文本
        4. 反向引用:通过反向引用,可以对分组已捕获的字符串进行引用。
      3. (?:Expression) 非捕获组
        1. 一些表达式中,不得不使用(),但又不需要保存()中子表达式匹配的内容,这时可以用非捕获组来抵消()带来的副作用。