正则表达式(参考codesheep)

  1. 正则表达式就是一个字符串,描述一定的规则。用有限的符号,表达无限的序列。

  2. 字符

    表达式 描述
    [abc] 字符集。匹配集合中所含的任一字符。
    [^abc] 否定字符集。匹配任何不在集合中的字符。
    [a-z] 字符范围。匹配指定范围内的任意字符。
    . 匹配除换行符以外的任何单个字符。
    \ 转义字符。
    \w 匹配任何字母数字,包括下划线(等价于[A-Za-z0-9_])。
    \W 匹配任何非字母数字下划线(等价于[^A-Za-z0-9_])。
    \d 数字。匹配任何数字。
    \D 非数字。匹配任何非数字字符。
    \s 空白。匹配任何空白字符,包括空格、制表符等。
    \S 非空白。匹配任何非空白字符。
  3. 分组和引用

    表达式 描述
    (expression) 分组。匹配括号里的整个表达式。分组默认都是捕获的
    (?:expression) 非捕获分组(非捕获分组可以提高性能和简化逻辑)。匹配括号里的整个字符串但不获取匹配结果,拿不到分组引用。
    \num 对前面所匹配分组的引用。比如(\d)\1可以匹配两个相同的数字,(Code)(Sheep)\1\2则可以匹配CodeSheepCodeSheep
  4. 锚点/边界

    表达式 描述
    ^ 匹配字符串或行开头。
    $ 匹配字符串或行结尾。
    \b 匹配单词(前或后)边界。比如Sheep\b可以匹配CodeSheep末尾的Sheep,不能匹配CodeSheepCode中的Sheep
    \B 匹配非单词边界。比如Code\B可以匹配HelloCodeSheep中的Code,不能匹配HelloCode中的Code
  5. 数量表示

    表达式 描述
    ? 匹配前面的表达式0个或1个。即表示可选项。优先匹配1次
    + 匹配前面的表达式至少1个。优先匹配n次
    * 匹配前面的表达式0个或多个。优先匹配n次
    ` `
    {m} 匹配前面的表达式m个。
    {m,} 匹配前面的表达式最少m个。优先匹配∞次
    {m,n} 匹配前面的表达式最少m个,最多n个。优先匹配n次

    *通过在 、+ 或 ? 限定符之后放置 ?,该表达式从"贪婪"表达式转换为"非贪婪"表达式或者最小匹配。

    a{1, 3}? // 匹配字符串'aaa'的话,会匹配a而不是aaa
    
  6. 预查断言:

    表达式 描述
    (?=) 正向预查。比如Code(?=Sheep)能匹配CodeSheep中的Code,但不能匹配CodePig中的Code
    (?!) 正向否定预查。比如Code(?!Sheep)不能匹配CodeSheep中的Code,但能匹配CodePig中的Code
    (?<=) 反向预查。比如(?<=Code)Sheep能匹配CodeSheep中的Sheep,但不能匹配ReadSheep中的Sheep
    (?<!) 反向否定预查。比如(?<!Code)Sheep不能匹配CodeSheep中的Sheep,但能匹配ReadSheep中的Sheep
  7. 特殊标志

    表达式 描述
    /.../i 忽略大小写。
    /.../g 全局匹配。
    /.../m 多行修饰符。用于多行匹配。

posted @ 2022-06-26 18:22  大于昨天  阅读(95)  评论(0编辑  收藏  举报