我正在尝试使用regex:获取此字符串中的2个值
a:2:{i:45;s:29:"Program Name 1";i:590;s:19:"Program Name 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);
我尝试了很多方法,但这是我第一次尝试使用regex从字符串中获取多个值。
这是当前的结果:Array([0]=>Array()[1]=>Array(())
我们非常感谢任何建设性的帮助。我已经阅读了php.net上的函数,但我找不到与我的需求非常匹配的关于堆栈溢出的类似问题。提前谢谢。
这看起来像一个序列化的字符串。使用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
)
这应该有效:
preg_match_all("/s:([0-9]+):/si", $page['perfarray'], $match);