在PHP中没有Regex删除多个空格

时间:2012-02-24 14:47:27

标签: php regex

将多个空格转换为一个空格的常见解决方案是使用这样的正则表达式:

preg_replace('/\s+/',' ',$str);

但是,正则表达式往往很慢,因为它必须加载正则表达式引擎。有非正则表达式方法吗?

3 个答案:

答案 0 :(得分:6)

尝试

while(false !== strpos($string, '  ')) {
    $string = str_replace('  ', ' ', $string);
}

答案 1 :(得分:4)

<强>更新

function replaceWhitespace($str) {
  $result = $str;

  foreach (array(
      "  ", " \t",  " \r",  " \n",
    "\t\t", "\t ", "\t\r", "\t\n",
    "\r\r", "\r ", "\r\t", "\r\n",
    "\n\n", "\n ", "\n\t", "\n\r",
  ) as $replacement) {
    $result = str_replace($replacement, $replacement[0], $result);
  }

  return $str !== $result ? replaceWhitespace($result) : $result;
}

与之相比:

preg_replace('/(\s)\s+/', '$1', $str);

手工制作的功能在很长(300kb +)琴弦上的速度大约快15%。

(至少在我的机器上)

答案 2 :(得分:1)

您可以使用php提供的trimstr_replace方法。