【发布时间】:2017-06-12 15:42:28
【问题描述】:
我想用空格替换非单词非空格字符。可以连续有很多符号字符,所以我使用下面的正则表达式
[^\s\w]*
所以,我使用的代码是:
$str = 'email@domain.com';
echo preg_replace('/[^\s\w]*/', ' ', $str);
我期待得到email domain com,但我得到e m a i l d o m a i n c o m,每个字符之间有空格。如果我像下面这样删除星号
echo preg_replace('/[^\s\w]/', ' ', $str);
然后我得到所需的email domain com。但是如果输入是email@@domain.com,那么这个正则表达式会给email domain com,在email 和domain 之间有两个空格,这不是我想要的。
谁能解释为什么[^\s\w]* 不起作用,我怎样才能实现我想要的?
【问题讨论】:
-
将
*替换为+-/[^\s\w]+/,'/[^\s\w]*/'匹配每个不匹配字符前的空格。 -
preg_replace('/[^\s\w]+/', ' ', $str)正是您所需要的。 -
@WiktorStribiżew 愚蠢的我。后来我意识到你是完全正确的
标签: php regex preg-replace whitespace