2011-12-13 2 views
8

文字列の先頭にあるすべてのスペースを(1つの正規表現内で)カウントしたいとします。空白文字の開始をカウントする

私のアイデア:たとえば

$identSize = preg_match_all("/^()[^ ]/", $line, $matches); 

$example1 = " Foo"; // should return 1 
$example2 = " Bar"; // should return 2 
$example3 = " Foo bar"; // should return 3, not 4! 

任意のヒント、私はそれをどのように解決することができますか?文字列の先頭に(それは「"文字列を返すと一致したことに)

答えて

14
$identSize = strlen($line)-strlen(ltrim($line)); 

それとも、あなたは正規表現をしたい場合は、

preg_match('/^(\s+)/',$line,$matches); 
$identSize = strlen($matches[1]); 
+1

最初はスマートです。 preg_matchよりも速いと思います。 – Powertieke

+0

+1ですが、最初のバージョンでは空白のみが考慮されますが、他の空白文字も含めたい場合があります。 – codaddict

+0

@ codaddict OPの質問は空白を数えることでしたが、そのために指定された正規表現に関する発言があればそれがあります。 –

1

あなたは連続した空白のためにするpreg_matchを行うことができます。

次に、一致文字列のstrlenを使用して、空白文字の数を返すことができます。

9

正規表現(または他のハック)を使用する代わりに、strspnを使用する必要があります。これは、この種の問題を処理するために定義されています。

$a = array (" Foo", " Bar", " Foo Bar"); 

foreach ($a as $s1) 
    echo strspn ($s1, ' ') . " <- '$s1'\n"; 

出力は

1 <- ' Foo' 
2 <- ' Bar' 
3 <- ' Foo Bar' 

OPは" \t\r\n\0\x0B"をする必要がありますstrspnへの第2引数を単に空白(すなわち、他の白文字)以上のものをカウントしたい場合

は( trimが白文字として定義されたものから撮影したもの)。

ドキュメントPHP: strspn - Manual

関連する問題