2016-04-30 14 views
0

私は、複数の空白を一致させるために、この正規表現で何が起こっているかを考え出す苦労しています:PHPの正規表現の未知の空白

$str = '   '; 

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

私は、3「本物」のスペースでそれをstrの値を交換する場合、実際には、あります期待通りに動作しますが、明らかにstrの文字は空白ではありません(他のソースからのコピー貼り付け)!しかし、私はそれらを実際のスペース/何で置き換えるためにそれらを一致させる必要があります。

私の質問:strでこれらの単純な宇宙見た目の文字は何ですか、もっと重要ですが、どのように正規表現でそれらをターゲットにしますか?

+0

質問に答えられるように改めてください。 –

答えて

2

中間の文字は、utf-8でエンコードされた非改行スペースです。正規表現にutf-8 modifier uを追加すれば、正常に動作します。 /\s{2,}/u

出力:

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

Example

+0

omg、ありがとうございます! – jav974

0

\ Sによって捕捉空白文字は、実空間(コード0x20の)水平タブ文字(0x09の)、キャリッジリターン(0x0Dを)、ラインフィード(0x0Aのを含んでいてもよいです)とフォームフィード(0x0C)。あなたは本当のスペースにすべてのこれらの文字をオンにしたいのであれば、あなたはこのラインを使用することがあります。

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

それとも、あなただけの単一実空間を持つ2つの以上の空白文字の配列を置換したい場合は、これを使用します代わりに:

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