2014-09-21 88 views
0

我知道,有很多類似的問題,你會說,是重複的,但我找不到解決方案! 我需要刪除多個空格,只寫一個空格。在我的代碼中,我寫了'REPLACE'而不是'',只是爲了澄清。這是一些代碼,我已經測試和不工作:刪除多個空格 - PHP沒有找到空格

$string=$data['post_content']; 
$filtered1=preg_replace("/[^\S\r\n]+/",'REPLACE',$string); 
$filtered2=preg_replace("#[^\S\r\n]+#",'REPLACE',$string); 
$filtered3=preg_replace("#[^\S\r\n][^\S\r\n]+#",'REPLACE',$string); 
$filtered4=preg_replace('#[^\S\r\n][^\S\r\n]+#','REPLACE',$string); 
$filtered5=preg_replace('#!\s+!#', 'REPLACE', $string); 
$filtered6=preg_replace("/(?<=\s)\x20|\x20(?=\s)/", "REPLACE", $string); 
$filtered7=preg_replace("/([\s])\1+/", "REPLACE", $string); 
$filtered8=preg_replace("#[^\S\r\n][^\S\r\n]#",'REPLACE',$string); 
$filtered9=preg_replace("'/\s+/'",'REPLACE',$string); 
$testing1=str_replace(" ","REPLACE",$string); 
$testing2=str_replace("\s",'REPLACE',$string); 
$testing3=str_replace(array(' '),'REPLACE',$string); 
$testing4=str_replace(' ',"REPLACE",$string); 
$testing5=str_replace(" ","REPLACE",$string); 
$testing6=str_replace(array(" "),'REPLACE',$string); 
$testing7=str_replace(array("\s\s"),'REPLACE',$string); 

這是字符串測試:

這是一個測試1 2 3 4 6端

而結果分別爲$filtered1$filtered2

thisREPLACE isREPLACEaREPLACEtestREPLACE1 REPLACE2 REPLACE3 REPLACE4 REPLACE6 REPLACEend。

對於所有其它的,其結果是:

這是一個測試1 2 3 4 6端

是像PHP沒有找到空間,即使使用explode是沒有找到雙重空間「」。我使用PHP 5.5.1

+0

,如果你想刪除所有的多個空格,你可以使用'的preg_replace(「/ \ s + /」,」」,$字符串);'(更換所有1個或多個實例空間與單個空間) – bansi 2014-09-21 16:45:55

+0

仍然返回相同的結果:「這是測試1 2 3 4 6結束」 – mgreca 2014-09-21 17:43:30

+0

您的預期輸出是什麼?你想匹配2個空格,你可以使用'preg_replace('/ \ s {2} /','',$ string);' – bansi 2014-09-22 04:00:09

回答

0

問題是不是正則表達式,這個問題是修改,我用了修改器u感謝Aurimas答案。這些是可能的解決方案:

$filtered1=preg_replace("/[^\S\r\n]+/u",' ',$string); 
$filtered2=preg_replace("#[^\S\r\n]+#u",' ',$string); 
$filtered3=preg_replace("#[^\S\r\n][^\S\r\n]+#u",' ',$string); 
$filtered10=preg_replace('/[^\S\r\n]{2,}/u',' ',$string);0 
$filtered11=preg_replace('/\h+/u', ' ', $string); 
$filtered16=preg_replace('/(\xA0+)/u', ' ', $string); 
1

這裏有雲 使用

preg_replace('/[^\S\r\n]{2,}/',' ',$string);轉換的雙空格單一

看到演示的位置:http://regex101.com/r/sP7wH7/1

但我會寧願被使用最簡單的preg_replace('/ {2,}/',' ',$string);即可完成此操作

+0

我知道正則表達式應該工作,但仍然返回相同的結果:這是一個測試1 2 3 4 6結束 – mgreca 2014-09-21 17:42:46

1

您的測試字符串包含非中斷空格,在您的正則表達式模式下,\s不會收到。而不是使用這樣的:

preg_replace('/(\s+)|(\xA0+)/u', ' ', $string);

+0

我需要保留新的行字符,但你的答案是有用的知道修飾符「u」 – mgreca 2014-09-22 12:42:03