我有一个文件,在某些单词中有几个空格。我需要清理文件并用一个空格替换现有的多间隔序列。我写了下面的说法根本不起作用,似乎我犯了一个大错误。
$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
答案 0 :(得分:25)
您的正则表达式用空格替换任何空格(包括零)。你应该只替换两个或更多(毕竟,用自己替换一个空格是没有意义的):
$s = preg_replace("/ {2,}/", " ", $x);
答案 1 :(得分:3)
我通常用来清理多个空格的是:
while (strpos($x, ' ') !== false) {
$x = str_replace(' ', ' ', $x);
}
条件/假设:
preg_replace
就CPU而言是昂贵的当然,如果不满足条件#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);