有人可以解释之间的差异[^\d\s]和[\D\S]?
来自http://www.regular-expressions.info/shorthand.html的描述并不是很清楚:
在方括号内使用否定短头时要小心.
[\D\S]是不一样的[^\d\s].后者匹配任何既不是数字也不是空白的字符.它匹配x,但不匹配8.但是,前者匹配任何不是数字或不是空格的字符.因为所有数字都不是空格,并且所有空格字符都不是数字,所以[\D\S]匹配任何字符; 数字,空格或其他.
它们对我来说似乎是一样的.或者我会错过什么?
[^\d\s]
Run Code Online (Sandbox Code Playgroud)
将匹配不是数字或空格的单个字符.
[\D\S]
Run Code Online (Sandbox Code Playgroud)
将匹配一个非数字或非空白的单个字符.
由于每个字符都不是数字或不是空格,因此第二个正则表达式将匹配任何字符.
它相当于以下区别:
if (!(isdigit(c) || isspace(c))) ...
Run Code Online (Sandbox Code Playgroud)
和
if (!isdigit(c) || !isspace(c)) ...
Run Code Online (Sandbox Code Playgroud)
请注意,以下内容相当于第一个(通过deMorgan定律):
if (!isdigit(c) && !isspace(c)) ...
Run Code Online (Sandbox Code Playgroud)
ooga的答案是正确的,但我发现它仍然不清楚.有时用不同的词语听取解释是有用的,所以让我试试.在我看来,误解真的很简单.Jan Goyvaerts(您阅读的网站的作者)没有描述特定的正则表达式功能,只是字符类逻辑的结果.让我们从头开始吧
[abc]表示"匹配一个字符是要么 a OR b 或 c需要注意的是,这并不意味着"匹配一个字符是a 与 b AND c,这将没有任何意义.[^abc]意味着"匹配一个既不 a 是 b 也不 是也不是c,也就是说,它不是a 和不是b 和不是c.请注意,数字1都是关于OR的,而数字2都是关于AND的.[^\d\s]意思是"匹配一个字符不是一个数字和不是空白",而[\D\S]表示"匹配一个字符或者是一个非数字的OR非空白"你可以看到3和4完全不同.
什么[\D\S]意思?
我们被允许"匹配一个字符要么是一个非数字或一个非空白".非数字可以是例如制表符.好的,所以我们可以匹配制表符,\D实际上它允许我们匹配任何空格,因为空格(如制表符)绝不是数字.现在让我们来看看\S.非空格可以表示例如9字符,因此\S允许我们匹配任何数字(和更多字符).因为[\D\S]"一个字符是\D OR \S ",但并不意味着"一个字符既是\D AND \S ",我们可以匹配任何数字和任何空格(实际上是任何字符).
和VS或
最关键的是,在这两个1号和4号,角色职业说"匹配一个字符,要么或这些字符.无论是喜欢说或在3号,我们说没有.这好像是说不是X 和不ÿ