我正在尝试构建以逗号分隔的项目列表。这些项由嵌入在表达式中的引号中的内容组成,类似于以下两个示例。
列表来自一个会话文件,包含一个起始文本标识符,后跟一个或s表示数组/字符串,一个数字表示数组中有多少项(如果没有数组则为0) - 这里是一对示例:
extralistids|a:3:{i:0;s:3:"id1";i:1;s:4:" id2";i:2;s:4:" id3";}
extralistids|s:0:"";
我有以下preg_match表达式,但它只捕获“id3” - 任何想法我做错了什么?
/extralistids.+?(?:{).*?("(.*?)"(?:.*?))+;(?:})/
答案 0 :(得分:0)
如果您想在模式中使用字符串extralistids
,请尝试以下正则表达式。
(?:\bextralistids\||(?<!^)\G)[^"]*\"([^"\n]*)"
<?php
$mystring =<<<EOT
extralistids|a:3:{i:0;s:3:"id1";i:1;s:4:" id2";i:2;s:4:" id3";}
extralistids|s:0:""
EOT;
$regex = '~(?:\bextralistids\||(?<!^)\G)[^"]*\"([^"\n]*)"~';
preg_match_all($regex, $mystring, $matches);
print_r($matches[1]);
?>
输出:
Array
(
[0] => id1
[1] => id2
[2] => id3
[3] =>
)