在单个preg_replace()调用中替换空格并删除非单词字符


Replace spaces and remove non-word characters in single preg_replace() call

我有这段代码,它做了我想要的,但在四个步骤。我只想要字母数字小写字母,空格应该用下划线代替。我已经写了这个函数,但想知道是否有可能使用一个preg_replace()函数调用:

      $str = 'qwerty!@#$@#$^@#$Hello %#$sdsdsss';
      $cityu= strtolower($str);
     $id = str_replace(' ', '_', $cityu);
      $outcome = preg_replace("/[^a-zA-Z0-9_]/", "", $id);
       var_dump($outcome);

我想要一个preg_replace()来做这个

您不能使用单个替换字符串,因为您正在执行两个不同的操作,但preg_replace()可以将数组作为参数。这允许您在单个preg_replace()调用中进行多组替换。

$str = strtolower('qwerty!@#$@#$^@#$Hello %#$sdsdsss');
echo preg_replace(array('/ /', '/'W/'), array('_', ''), $str);
// output:  qwertyhello_sdsdsss

'W是一个与[^A-Za-z0-9_]等价的反型简写字符类。


请注意,更换顺序很重要。替换将按照它们列出的顺序发生,因此您将以相反的顺序得到不同的结果:第一个非单词字符将被替换,然后是空格,但空格将在第一步中已经被删除。

echo preg_replace(array('/'W/', '/ /'), array('', '_'), $str);
// output:  qwertyhellosdsdsss