我有这个字符串:
a:3:{i:0;i:2;i:1;i:3;i:2;i:4;}
我希望在“a:”和“:{”之间得到数字,即“3”。 我尝试使用substr和strpos但没有成功。 我是正则表达式的新手,写下这个:
preg_match('/a:(.+?):{/', $v);
但它归还给我1。 感谢您的任何提示。
答案 0 :(得分:4)
preg_match
返回匹配数,在您的情况下为1匹配。
要自己获取匹配项,请使用第三个参数:
$matches = array();
preg_match(/'a:(\d+?):{/', $v, $matches);
那就是说,我认为字符串看起来像一个序列化数组,您可以使用unserialize
反序列化,然后在实际数组上使用count
(即$a = count(unserialize($v));
)。请谨慎使用用户提供的序列化字符串...
答案 1 :(得分:2)
如果您知道a:
始终位于字符串的开头,则最简单的方法是:
$array = explode( ':', $string, 3 );
$number = $array[1];
答案 2 :(得分:2)
您可以使用sscanf
Docs从字符串中获取数字:
# Input:
$str = 'a:3:{i:0;i:2;i:1;i:3;i:2;i:4;}';
# Code:
sscanf($str, 'a:%d:', $number);
# Output:
echo $number; # 3
当您想要从模式后面的字符串中获取特定值时,这通常比使用preg_match
更简单。
答案 3 :(得分:1)
preg_match()
返回找到匹配的次数,这就是原因。你需要添加第三个参数。 $matches
,它将存储匹配项。
答案 4 :(得分:1)