跳转到主要内容
模块 5 · 第 3 课(共 4)课程中的19/32~8 min
模块课程(3/4)

否定:`[^...]`

将插入符号 ^ 作为括号内的 第一个 字符 反转类:它匹配除**列出的字符之外的任何字符。

Code
Pattern: [^aeiou]
Sample:  ciao mondo
          ^   ^^  ^

[^aeiou] matches consonants, spaces, punctuation, digits\u2026 everything that 不是元音。

典型例子

  • [^\s] -- any "non-space" character (equivalent to \S).
  • [^0-9] -- anything that is not a digit (equivalent to \D).
  • [^"]+ -- "a sequence of characters that are not double quotes" (useful to 提取引号之间的内容)。
Code
Pattern: "([^"]+)"
Sample:  Il libro "Il nome della rosa" e' famoso.

The group ([^"]+) captures everything between quotes stopping before the next ": it is a classic trick to avoid the 贪婪与懒惰的问题。

否定和替代通配符

否定类 [^...] 仅消耗一个不属于所列集合的字符。它是一个强大的工具,可以防止引擎运行超过关键分隔符,避免无限回溯循环导致的 ReDoS。

尝试一下

锻炼#regex.m5.l3.e1
尝试:0加载中...

提取双引号之间的每个字符串的内容,而不捕获引号本身。

正在加载编辑器...
显示提示

将 .+ 替换为 [^"]+:这样匹配就停止在下一个引号处。

3 次尝试后可用的解决方案

复习练习

锻炼#regex.m5.l3.e2
尝试:0加载中...

找到仅由辅音组成的每个单词(没有元音,没有数字,没有符号)。

正在加载编辑器...
显示提示

在括号内,您可以将元音否定与 \\W(非单词)和 \\d(数字)组合起来。

3 次尝试后可用的解决方案

额外的挑战

锻炼#regex.m5.l3.e3
尝试:0加载中...

匹配一个或多个字符的序列,明确排除空格和逗号。

正在加载编辑器...
显示提示

将 [^\\s,] 与 + 量词一起使用。

3 次尝试后可用的解决方案