我不明白为什么这个正则表达式:
[^\d\s\w,]
匹配字符串:
"leonardo,davinci"
这是我的测试:
$ echo "leonardo,davinci" | egrep '[^\d\w\s,]'
leonardo,davinci
虽然这个方法达到了预期的效果:
$ echo "leonardo,davinci" | egrep '[\S\W\D]'
$
非常感谢你。
egrep
没有预定义的集合\d
,\w
和\s
。因此,在它们前面加上斜杠只是字面匹配它们。
leonardo,davinci
echo "leonardo,davinci" | egrep '[^a-zA-Z0-9 ,]'
确实,不匹配。
pcregrep
代替:
echo "leonardo,davinci" | pcregrep '[^\w\s,]'
\t
也会失败:echo -e 'foo\tbar' | egrep '\t'
没有匹配项。 - ndnenkov
[\d\w]
是多余的:\w = [a-zA-Z0-9_]
。 - Sam