我想计算(在单个正则表达式中)字符串开头的所有空格。
我的想法:
$identSize = preg_match_all("/^( )[^ ]/", $line, $matches);
例如:
$example1 = " Foo"; // should return 1
$example2 = " Bar"; // should return 2
$example3 = " Foo bar"; // should return 3, not 4!
任何提示,我如何解决?
答案 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
定义为白色字符的那个)。
答案 2 :(得分:1)
你可以在字符串的开头为连续的空格做一个preg_match(以便它匹配字符串返回“”)。
然后你可以在匹配上使用strlen来返回空白字符数。