2016-04-30 25 views
0

我有一個很難搞清楚什麼是與這個正則表達式發生匹配多個空白:PHP的正則表達式未知的空白

$str = '   '; 

if (preg_match_all('/\s{2,}/', $str, $matches)) { 
    var_dump($matches); 
} 

事實是,如果我用3「真正的」空格替換海峽值,它按預期工作,但很顯然,str中的字符不是空格(從其他源複製粘貼)!但我需要匹配它們來替換它們與真實空間/任何。

我的問題:那些簡單的空間看字符和更重要的是什麼,我如何將它們定位在正則表達式中?

+0

請重新表述問題,以便可以回答。 –

回答

2

中間字符是utf-8編碼的非破壞空間。將utf-8 modifier u添加到您的正則表達式中,它可以正常工作。 /\s{2,}/u

輸出:通過\ S捕獲

array(1) { 
    [0]=> 
    array(1) { 
    [0]=> 
    string(4) " " 
    } 
} 

Example

+0

omg,謝謝你的工作很棒! – jav974

0

的空白字符可以包括真實空間(代碼爲0x20)水平製表符(0×09),回車符(0x0D),換行字符(0x0A )和換頁(0x0C)。所以,如果你想所有的這些人物轉向真正的空間,你可以使用這條線:

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

或者,如果你想只是一個單一的現實空間,以取代兩個或多個空白字符的序列,使用此相反:

$str=preg_replace('/\s{2,}/',' ',$str);