用单个空格替换字符串中的多个空格

时间:2014-03-05 08:29:20

标签: php regex

我有一个文件,在某些单词中有几个空格。我需要清理文件并用一个空格替换现有的多间隔序列。我写了下面的说法根本不起作用,似乎我犯了一个大错误。

 $s = preg_replace("/( *)/", " ", $x);

我的文件非常简单。以下是其中的一部分:

Hjhajhashsh dwddd dddd sss   ddd wdd ddcdsefe xsddd   scdc yyy5ty    ewewdwdewde           wwwe ddr3r dce eggrg               vgrg fbjb   nnn  bh jfvddffv mnmb   weer ffer3ef f4r4 34t4 rt4t4t 4t4t4t4t    ffrr  rrr  ww w w ee3e iioi   hj   hmm  mmmmm mmjm lk ;’’ kjmm  ,,,, jjj hhh  lmmmlm m mmmm lklmm jlmm m

4 个答案:

答案 0 :(得分:25)

您的正则表达式用空格替换任何空格(包括)。你应该只替换两个或更多(毕竟,用自己替换一个空格是没有意义的):

$s = preg_replace("/ {2,}/", " ", $x);

答案 1 :(得分:3)

我通常用来清理多个空格的是:

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

条件/假设:

  1. 多个空格的字符串很少
  2. 两个空格远比三个或更多
  3. 更常见
  4. preg_replace就CPU而言是昂贵的
  5. 应尽可能避免将字符复制到新字符串
  6. 当然,如果不满足条件#1,这种方法没有意义,但通常是。

    如果符合#1,但其他任何一个都不符合(这可能取决于数据,软件(PHP版本)甚至硬件),那么以下内容可能会更快:

    if (strpos($x, '  ') !== false) {
       $x = preg_replace('/  +/', ' ', $x); // i.e.: '/␣␣+/'
    }
    

    无论如何,如果只有2%的字符串出现多个空格,重要的是使用strpos进行预防性检查,您可能并不关心优化其余2%的情况

答案 2 :(得分:1)

//你的输入 STR $ =“Hjhajhashsh dwddd DDDD SSS DDD WDD ddcdsefe xsddd SCDC yyy5ty ewewdwdewde wwwe ddr3r DCE eggrg vgrg fbjb NNN BH jfvddffv mnmb weer ffer3ef f4r4 34t4 rt4t4t 4t4t4t4t ffrr RRR WW WW ee3e iioi HJ HMM MMMMM mmjm LK; '' kjmm ,,,, jjj hhh lmmmlm m mmmm lklmm jlmm m“;         echo $ str。'
';

    $output = preg_replace('!\s+!', ' ', $str); // Replace multispace with sigle.

    echo $output;

答案 3 :(得分:0)

请尝试以下操作:

$output = preg_replace('/\s+/', ' ',$string);