计算开始的空格

时间:2011-12-13 09:05:01

标签: php regex

我想计算(在单个正则表达式中)字符串开头的所有空格。

我的想法:

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

例如:

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

任何提示,我如何解决?

3 个答案:

答案 0 :(得分:16)

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

或者,如果你想要正则表达式,

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

答案 1 :(得分:11)

不应使用正则表达式(或任何其他黑客),而应使用strspn,它被定义为处理这些类型的问题。

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

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

输出

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

如果OP想要计算的不仅仅是空格(即其他白色字符),strspn的第二个参数应该是" \t\r\n\0\x0B"(取自trim定义为白色字符的那个)。

文档PHP: strspn - Manual

答案 2 :(得分:1)

你可以在字符串的开头为连续的空格做一个preg_match(以便它匹配字符串返回“”)。

然后你可以在匹配上使用strlen来返回空白字符数。