3v4l.org

run code in 500+ PHP versions simultaneously
<?php function rSplitReverse($string) { preg_match_all("/\(((?:(?>[^()]+)|(?R))*)\)/", $string, $matches); foreach ($matches[1] as &$m) { if (preg_match_all("/(\((?:(?>[^()]+)|(?R))*\))|[^(),]+/", $m, $items, PREG_SET_ORDER)) { $first = array_shift($items)[0]; foreach ($items as &$item) { $item = isset($item[1]) ? rSplitReverse($item[0]) : $item[0]; } $m = "$first," . implode(',', array_reverse($items)); } } return '(' . implode('),(', array_reverse($matches[1])) . ')'; } echo rSplitReverse('(X,1,1,3),(X,1,1,3),(X,@2,@2,@2,@2,@2,(Y,1))');
Output for 8.1.0 - 8.1.34, 8.2.0 - 8.2.30, 8.3.0 - 8.3.30, 8.4.1 - 8.4.18, 8.5.0 - 8.5.3
(X,(Y,1),@2,@2,@2,@2,@2),(X,3,1,1),(X,3,1,1)

preferences:
59.73 ms | 978 KiB | 4 Q