在Perl中,正则表达式的\w和\S有啥区别?

提问者:1315464 提问时间:2017年05月16日 人气:1
用户提问
my $names = "Fred and Barney";
if ( $names =~ /(\S+) and (\S+)/ ) {
say "I saw $1 and $2";
}
在这里没有任何区别啊,求解!
在这个程序里面\S+可以换成\w+么?
推荐答案
\w 表示匹配大小写英文字母、数字以及下划线,等价于'[A-Za-z0-9_]'。
\S 表示匹配非空白字符,范围可广了,只要不是空格、换行符、制表符、换页符即可

你举的例子看不出区别,但你试试 my $names = "Fred and Bar-ney"; 就看出来了
辅助答案
用户:supbose
2017年06月14日
\w 不包括 :;"'+-*/@# 这些... 只有 [a-zA-Z0-9_]
\S 非空白就行了, 可以理解为 [a-zA-Z0-9_] 再加上 :;"'+-*/@# ... 这些
用户:走狗的路一
2017年07月09日
\w 是可以组成单词的[a-zA-Z0-9_]不包含特殊符号
\S 是非空格,制表符,换行等