Захват повторяющейся группы с использованием регулярного выражения

Я пытаюсь составить список элементов через запятую. Элементы состоят из того, что находится в кавычках, встроенных в выражения, аналогичные приведенным ниже двум примерам.

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

0

Решение

Если вы хотите использовать строку extralistids в вашем шаблоне попробуйте следующее регулярное выражение.

(?:\bextralistids\||(?<!^)\G)[^"]*\"([^"\n]*)"

DEMO

<?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] =>
)
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]