*, ?, +
字符均表示与此字符匹配。哪个字符表示不匹配?例子会有所帮助。
Answers:
您可以使用否定字符类来排除某些字符:例如,[^abcde]
将匹配除a,b,c,d,e之外的任何字符。
您可以在字符类内部使用简写形式,而不必按字面意义指定所有字符:([\w]
小写)将匹配任何“单词字符”(字母,数字和下划线),[\W]
(大写)将匹配单词字符以外的任何字符;同样,[\d]
将匹配0-9数字,而[\D]
匹配除0-9数字以外的任何数字,依此类推。
如果您使用PHP,则可以查看正则表达式字符类文档。
说“不匹配”有两种方法:字符范围和零宽度负向前/后向。
前者:不匹配a
,b
,c
或0
:[^a-c0]
后者:匹配除foo
和以外的任何三个字母的字符串bar
:
(?!foo|bar).{3}
要么
.{3}(?<!foo|bar)
另外,还为您提供了一个更正:*
,?
并且+
实际上不匹配任何内容。它们是重复运算符,并且始终遵循匹配运算符。因此,a+
方法相匹配的一种或多种a
,[a-c0]+
方法相匹配的一种或多种a
,b
,c
或者0
,同时[^a-c0]+
将匹配一个或多个的任何不是a
,b
,c
或0
。
^((?!foo).)+$
匹配不包含foo的任何行regex101.com/r/z6a65l/4
^
用于字符范围的开头,或否定先行/后向断言。
>>> 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>
?!
在最后两个示例中使用,还是可以单独使用!
??
在那里做什么?
?
,以告知它是扩展。其他正则表达式引擎可能有自己的规则。