画布 1
正则表达式
  匹配单个字符
    匹配纯文本
    匹配任意字符使用 "." (英文句号)
    匹配特殊字符，使用 "\" 转义
    匹配一组字符
      使用 "[]" 匹配方括号中的字符
      可以在 "[]" 中使用 "-" 表示范围
        例如可以使用 [0-3] 表示 [0123]
        "-" 是一个特殊的元字符，只有在 "[]" 中的时候才需要转义
      取非，在 "[]" 中使用 "^"，如 [^0-9] 表示取非数字
    匹配空白字符
      \b 回退符
\f 换页符
\n 换行符
\r 回车符
\t 制表符
\v 垂直制表符
        Windows 使用 \r\n 表示换行，其他系统则使用 \n
      \s 任意空白字符，等价于[\f\n\r\t\v]
\S 任意非空白字符
        注意 \s 不包括 \b，虽然我也不知道回退符是啥意思
    匹配数字，非数字
      \d 数字(digital)
\D 非数字
        同样可以用 [] 以及 ^ 完成
        大写通常表示相反的意思
    匹配字母与数字，非字母数字
      \w 字母数字(word)，等价于[a-zA-Z0-9]
\W 非字母数字
    匹配8进制，16进制
      \xXX 匹配十六进制，如\x0A 匹配 ASCII 字符 10，等同\n
\0XX 匹配把进制，如\011 匹配 ASCCII 字符9，等同\t
  重复匹配
    匹配一个或者多个使用 "+"
    匹配零个或多个 "*"
    匹配零个或一个 "?"
    匹配固定次数
      使用{X}，例如{3}表示匹配三次
    匹配范围
      使用{X, Y} 表示匹配次数在 X 与 Y 之间，{3,5}表示匹配三次到五次之间
      使用{X, } 表示至少匹配 X 次
    贪婪型/懒惰型元字符
      "*", "+", "{X, }" 均为贪婪型元字符，表示他们会匹配尽可能多的字符
      *? "*" 的懒惰模式
+? "+" 的懒惰模式
{X, }? "{X,}" 的懒惰模式
  位置匹配
    边界
      单词边界
        \b 表示单词边界(boundary)
          边界只匹配一个位置，不会匹配任何字符
      字符串边界
        ^ 表示字符串开头
$ 表示字符串结尾
  子表达式(subexpression)
    子表达式顾名思义是更大的表达式的一部分，是为了把子表达式当成一个元素来使用。子表达式需要用 "(" 和 ")" 括起来
    子表达式也可用于 "|" 操作符的 OR 条件
    回溯引用(backreference)
      回溯引用允许正则表达式引用前面匹配的结果
      回溯引用使用 \N ，其中 N 为数字，代表第几个子表达式
        不同语言表达方式可能不一样
        例如 <h([123])>.*?</h\1> 会匹配 h1,h2 等对应的标签，不会匹配 <h1>hello</h2>
      回溯引用不仅可以用在搜索中，同样可以用在替换中
        替换中控制大小写
\E 结束\L或\U转换
\l 把下一个字符转换为小写
\L 把\L到\E之间的字符全部转换为小写
\u 把下一个字符转换为大写
\U 把\U到\E之间的字符全部转换为大写
    前后查找(lookaround)
      前后查找使用一些子表达式来定位需要查找的字符，但是结果中并不包含这些子表达式
      向前查找使用一个以 ?= 开头的子表达式
        例：对于字符串 "http://www.baidu.com"，应用正则表达式 ".*(?=:)"，只会匹配 http 协议部分，不会匹配到 ":"
      向后查找使用一个以 ?<= 开头的子表达式
        例：对于字符串 "Apple: $100" ，应用正则表达式 "(?<=\$)\d*"，只会匹配数字部分，不会匹配到钱币符号
      对前后查找取非
        负向前查找使用 "?!"
          例：对字符串 "$30 for 100 apples"，应用正则表达式 "(?<!\$)\d*"，只会匹配 到30 中的 0 和 100，不会匹配到 30
        富向后查找使用 "?<!"
    嵌入条件，嵌入条件使用 "?"
      回溯引用条件
        使用 ?(backreference)true-regex|flase-regex 语法
          例如，对字符串123-456-7890与(123)456-7890 应用正则表达式 "(\()?\d{3}(?(1)\)|-)\d{3}-\d{4}" 均可匹配
      前后查找条件
        只需要把回溯引用中的 backreference 换成前后查找表达式即可
          例如，对字符串 11111 与 11111-1111 应用正则表达式 \d{5}(?(?=-)-\d{4}) 均会与其匹配
      很多地方不支持该用法