为什么[^\d\w\s,]匹配"leonardo,davinci"?

Luc*_*uca 4 regex grep

我无法理解为什么正则表达式:

[^\d\s\w,]
Run Code Online (Sandbox Code Playgroud)

匹配字符串:

"leonardo,davinci"
Run Code Online (Sandbox Code Playgroud)

那是我的考验:

$ echo "leonardo,davinci" | egrep '[^\d\w\s,]'
leonardo,davinci
Run Code Online (Sandbox Code Playgroud)

虽然这按预期工作:

$ echo "leonardo,davinci" | egrep '[\S\W\D]'
$ 
Run Code Online (Sandbox Code Playgroud)

非常感谢

ndn*_*kov 9

这是因为egrep没有预定义集\d,\w,\s.因此,将斜杠放在它们前面只是字面上匹配它们:

leonar d o,d avinci

echo "leonardo,davinci" | egrep '[^a-zA-Z0-9 ,]'
Run Code Online (Sandbox Code Playgroud)

确实,不会匹配.


如果已安装,则可以使用pcregrep:

echo "leonardo,davinci" | pcregrep '[^\w\s,]'
Run Code Online (Sandbox Code Playgroud)