Я пытаюсь составить список элементов через запятую. Элементы состоят из того, что находится в кавычках, встроенных в выражения, аналогичные приведенным ниже двум примерам.
Список взят из файла сеанса, содержащего начальный текстовый идентификатор, за которым следуют a или 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.+?(?:{).*?("(.*?)"(?:.*?))+;(?:})/
Если вы хотите использовать строку 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] =>
)
Других решений пока нет …