Я не знал о PREG_SPLIT_DELIM_CAPTURE
до того, как написал свой ответ.Это определенно понятнее, чем использование preg_match_all
:
<?php
$s = 'a|b|c,d+e|f,g';
if (preg_match_all('/([^+,|]+)([+,|])*/', $s, $matches)) {
for ($i = 0; $i < count($matches[0]); $i++) {
echo("got '{$matches[1][$i]}' via delimiter '{$matches[2][$i]}'\n");
}
}