PHP:获取2个字符串之间的数字

时间:2011-11-20 08:55:03

标签: php regex

我有这个字符串:

a:3:{i:0;i:2;i:1;i:3;i:2;i:4;}

我希望在“a:”和“:{”之间得到数字,即“3”。 我尝试使用substr和strpos但没有成功。 我是正则表达式的新手,写下这个:

preg_match('/a:(.+?):{/', $v);

但它归还给我1。 感谢您的任何提示。

5 个答案:

答案 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)

您可以使用sscanfDocs从字符串中获取数字:

# 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)

您与strpos()substr()

的距离并不太远
$pos_start = strpos($str,'a:')+2;
$pos_end = strpos($str,':{')-2;
$result = substr($str,$pos_start,$pos_end);

preg_match只检查外观,它不会返回任何字符串。