Preg_Match_All和RegEx获取值

时间:2013-12-04 16:53:08

标签: php regex preg-match-all

我正在尝试使用正则表达式获取此字符串中的2个值:

a:2:{i:45;s:29:"Program Name 1";i:590;s:19:"Program Name 2";}

有2个变量以“s:”开头,以“:”结尾,我试图从这个字符串中获取(和类似的字符串。

$string = 'a:2:{i:45;s:29:"Program Name 1";i:590;s:19:"Program Name 2";}';
preg_match_all("/s:(\d+):/si", $page['perfarray'], $match);
print_r($match);

我尝试了很多东西,但这是我第一次尝试使用正则表达式从字符串中获取多个值。

这是当前的结果:Array([0] => Array()[1] => Array())

非常感谢任何建设性的帮助。我已经阅读了php.net上的函数,我找不到与堆栈溢出类似的问题,足以满足我的需求。提前谢谢。

2 个答案:

答案 0 :(得分:2)

这应该有效:

preg_match_all("/s:([0-9]+):/si", $page['perfarray'], $match);

答案 1 :(得分:1)

这看起来像一个序列化的字符串。使用unserialize()来检索所需的值,而不是使用正则表达式。

更新:您的字符串看起来不是有效的序列化字符串。在这种情况下,可以使用正则表达式来完成工作:

$string = 'a:2:{i:45;s:29:"Program Name 1";i:590;s:19:"Program Name 2";}';
if(preg_match_all("/s:(\d+):/si", $string, $matches)) {
    print_r($matches[1]);
}

输出:

Array
(
    [0] => 29
    [1] => 19
)