为了账号安全,请及时绑定邮箱和手机立即绑定

'/[\w\-]+@\w+\.\w+/'为什么不是'/[\w\s\-]+@\w+\.\w+/'??后者也匹配成功

\w匹配字母或者数字或者下划线,'/[\w\-]+.......'没有空格的匹配邮箱怎么还能匹配成功呢?

正在回答

1 回答

s也可以代表空的字符

0 回复 有任何疑惑可以回复我~
#1

苏乞儿儿 提问者

我的意思是'/[\w\-]+@\w+\.\w+/'没有空格的匹配(空格匹配要用\s)邮箱怎么还能匹配成功?
2016-12-04 回复 有任何疑惑可以回复我~
#2

楚童 回复 苏乞儿儿 提问者

因为[\w\s\-]中括号里的内容是合集 只要出现一类或者多类就行。这里邮箱也没有- 不一样是匹配成功的吗。中括号里的代表一个范围 只要出现在该范围内 都是匹配成功的。再比如[a-zA-Z]就是代表大小写字母。
2016-12-10 回复 有任何疑惑可以回复我~
#3

苏乞儿儿 提问者 回复 楚童

您还没懂我的意思,原本的正则表达式开头是[\w\-]这样的,而\w匹配字母或者数字或者下划线,没有空格匹配符(我理解的空格需要用\s来匹配),所以我觉得应该改成[\w\s\-]才能匹配出空格,但是现在加不加\s都能匹配出空格,于是我就有些不解。
2016-12-31 回复 有任何疑惑可以回复我~
#4

慕慕5412057 回复 苏乞儿儿 提问者

根本不行吧,加了s
2017-01-01 回复 有任何疑惑可以回复我~
#5

金泽城 回复 苏乞儿儿 提问者

$subject = "my email is spark@imooc.com"; $str = '/[\w\s\-]+@\w+\.\w+/'; preg_match($str, $subject, $match); echo $match[0]; 它的输出结果是:my email is spark@imooc.com,因为它符合在 @ 前面尽可能多的匹配字母和空格; 反之,如果你把 \s 去掉,才会得到:spark@imooc.com,因为它在 @ 前面不会匹配空格,所以从 spark 那里才算开始匹配上。
2017-03-09 回复 有任何疑惑可以回复我~
查看3条回复

举报

0/150
提交
取消

'/[\w\-]+@\w+\.\w+/'为什么不是'/[\w\s\-]+@\w+\.\w+/'??后者也匹配成功

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信