<?php
$str = 'KML001-002-003-004-XML001^005';
$pattern = '/[a-z]{3}[0-9\-\^]+/i';
$matches = preg_match_all($pattern, $str, $major_series);
if (!$matches) die('no matches were found');
else echo $matches . ' major series were found <br>';
foreach($major_series[0] as $maj) {
$letters = substr($maj, 0, 3);
$numbers = substr($maj, 3);
if (strstr($numbers, '^')) {
$number_pieces = explode('^', $numbers);
$lo_number = intval($number_pieces[0]);
$hi_number = intval($number_pieces[1]);
for($i=$lo_number; $i<=$hi_number; $i++) {
echo $letters . str_pad(strval($i), 3, '0', STR_PAD_LEFT) . '<br>';
}
} else {
$matches = preg_match_all('/\d+/', $numbers, $num_matches);
if ($matches) {
foreach($num_matches[0] as $num) {
echo $letters . $num . '<br>';
}
} else {
echo 'No number matches found<br>';
}
}
}
?>