3v4l.org

run code in 500+ PHP versions simultaneously
<?php $string = 'A1-3, 5B-7'; echo preg_replace_callback_array( [ '/(\d+)([A-Z]+)-(\d+)/' => fn($m) => implode($m[2] . ', ', range($m[1], $m[3])) . $m[2], '/([A-Z]+)(\d+)-(\d+)/' => fn($m) => $m[1] . implode(', ' . $m[1], range($m[2], $m[3])), ], $string );
Output for 8.0.1 - 8.0.30, 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
A1, A2, A3, 5B, 6B, 7B

preferences:
90.5 ms | 1100 KiB | 4 Q