哪个正则expression式运算符意味着“不要”匹配这个字符?

*, ?, +字符都意味着匹配这个字符。 哪个字符意思是“不”匹配这个? 例子会有所帮助。

您可以使用否定字符类排除某些字符:例如[^abcde]将匹配除a,b,c,d,e字符之外的任何字符。

可以在字符类中使用shorthands[\w] (小写)将匹配任何“单词字符”(字母,数字和下划线), [\W] (大写字母)将匹配除了单词之外的所有字符字符; 类似地, [\d]将匹配0-9数字,而[\D]匹配除了0-9数字之外的任何内容,依此类推。

如果您使用PHP,您可以查看正则expression式字符类文档 。

有两种方式可以说“不匹配”:字符范围和零宽度负向预测/向后看。

前者:不匹配abc0[^a-c0]

后者:匹配除了foobar之外的任何三个字母的string:

(?!foo|bar).{3}

要么

.{3}(?<!foo|bar)

另外,为你更正: * ?+实际上不匹配任何东西。 他们是重复操作员,并始终遵循匹配的操作员。 因此, a+手段匹配a[a-c0]+中的一个或多个意味着匹配abc0中的一个或多个,而[^a-c0]+匹配一个或多个不是abc0

[^] (在[]内 )在正则expression式中是否定的,而^是“开始string”

[^az]匹配任何不是从“a”到“z”的单个字符

^[az]表示string从“a”开始到“z”

参考

^在字符范围的开始处使用,或负向前视/后视声明。

 >>> re.match('[^f]', 'foo') >>> re.match('[^f]', 'bar') <_sre.SRE_Match object at 0x7f8b102ad6b0> >>> re.match('(?!foo)...', 'foo') >>> re.match('(?!foo)...', 'bar') <_sre.SRE_Match object at 0x7f8b0fe70780>