<?php
$strs = ['c0', 'c0-3', 'c0+3', 'c0 & 9', 'c0A'];
$terms = ['episode', 'chapter', 'ch', 'ep', 'c', 'e', ''];
return strlen($term) > 0 ?
"(" . substr($term, 0, 1) . ")(" . substr($term, 1) . "s?)": "()()" ;}, $terms)) . ")\s*";
$terms)) . ")\s*";
$reg = "~$chapter_main_rx((\d+(?:\.\d+)?(?:[A-Z]\b)?)(?:\s*(?:[,&+-]|and)\s*(?:$chapter_aux_rx)?(?4))*)~ui";
foreach ($strs as $s) {
"~(\d*(?:\.\d+)?)([A-Z]?)\s*-\s*(?:$chapter_aux_rx)?|(\d+(?:\.\d+)?(?:[A-Z]\b)?)(?:\s*(?:[,&+]|and)\s*(?:$chapter_aux_rx)?(?1))*~ui", function($x) use ($chapter_aux_rx) {
return strlen($x[3]) > 0 ? buildNumChain
(preg_split("~\s*(?:[,&+]|and)\s*(?:$chapter_aux_rx)?~ui", $x[0])) }, $m[3]);
print_r(["original" => $s, "found_match" => trim($m[0]), "converted" => $m[1] . $p3]); echo "\n";
} else {
echo "No match for '$s'!\n";
}
}
function buildNumChain($arr) {
$ret = "";
$rngnum = "";
for ($i=0; $i < count($arr); $i++) { $val = $arr[$i];
$part = "";
if (preg_match('~^(\d+(?:\.\d+)?)([A-Z]?)$~i', $val, $ms)) { $val = $ms[1];
}
}
$val = $val + 0;
if (($i < count($arr) - 1) && $val == ($arr[$i+1] + 0) - 1) { $ret .= ($i == 0 ? "" : " & ") . $val;
}
$rngnum = $val;
} else if (!empty($rngnum) || $i == count($arr)) { $ret .= '-' . $val;
$rngnum = "";
} else {
$ret .= ($i == 0 ? "" : " & ") . $val . $part;
}
}
return $ret;
}
PD9waHAKCiRzdHJzID0gWydjMCcsICdjMC0zJywgJ2MwKzMnLCAnYzAgJiA5JywgJ2MwQSddOwokdGVybXMgPSBbJ2VwaXNvZGUnLCAnY2hhcHRlcicsICdjaCcsICdlcCcsICdjJywgJ2UnLCAnJ107CiAKJGNoYXB0ZXJfbWFpbl9yeCA9ICIoP3wiIC4gaW1wbG9kZSgifCIsIGFycmF5X21hcChmdW5jdGlvbiAoJHRlcm0pIHsKCXJldHVybiBzdHJsZW4oJHRlcm0pID4gMCA/ICIoIiAuIHN1YnN0cigkdGVybSwgMCwgMSkgLiAiKSgiIC4gc3Vic3RyKCR0ZXJtLCAxKSAuICJzPykiOiAiKCkoKSIgO30sCiAgJHRlcm1zKSkgLiAiKVxzKiI7CiRjaGFwdGVyX2F1eF9yeCA9ICIoPzoiIC4gaW1wbG9kZSgifCIsIGFycmF5X21hcChmdW5jdGlvbiAoJHRlcm0pIHsKCXJldHVybiBzdHJsZW4oJHRlcm0pID4gMCA/IHN1YnN0cigkdGVybSwgMCwgMSkgLiAiKD86IiAuIHN1YnN0cigkdGVybSwgMSkgLiAicz8pIjogIiIgO30sCiAgJHRlcm1zKSkgLiAiKVxzKiI7CiAKJHJlZyA9ICJ+JGNoYXB0ZXJfbWFpbl9yeCgoXGQrKD86XC5cZCspPyg/OltBLVpdXGIpPykoPzpccyooPzpbLCYrLV18YW5kKVxzKig/OiRjaGFwdGVyX2F1eF9yeCk/KD80KSkqKX51aSI7Cgpmb3JlYWNoICgkc3RycyBhcyAkcykgewogICAgaWYgKHByZWdfbWF0Y2goJHJlZywgJHMsICRtKSkgewogICAgICAgICRwMyA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygKICAgICAgICAgICAgIn4oXGQqKD86XC5cZCspPykoW0EtWl0/KVxzKi1ccyooPzokY2hhcHRlcl9hdXhfcngpP3woXGQrKD86XC5cZCspPyg/OltBLVpdXGIpPykoPzpccyooPzpbLCYrXXxhbmQpXHMqKD86JGNoYXB0ZXJfYXV4X3J4KT8oPzEpKSp+dWkiLCBmdW5jdGlvbigkeCkgdXNlICgkY2hhcHRlcl9hdXhfcngpIHsKICAgICAgICAgICAgICAgIHJldHVybiBzdHJsZW4oJHhbM10pID4gMCA/IGJ1aWxkTnVtQ2hhaW4ocHJlZ19zcGxpdCgiflxzKig/OlssJitdfGFuZClccyooPzokY2hhcHRlcl9hdXhfcngpP351aSIsICR4WzBdKSkgCiAgICAgICAgICAgICAgICA6IChzdHJsZW4oJHhbMV0pID4gMCA/ICgkeFsxXSArIDApIDogJHhbMV0pIC4gKHN0cmxlbigkeFsyXSkgPiAwID8gb3JkKHN0cnRvbG93ZXIoJHhbMl0pKSAtIDk2IDogIiIpIC4gIi0iOwogICAgICAgICAgICB9LCAkbVszXSk7CiAgICAgICAgcHJpbnRfcihbIm9yaWdpbmFsIiA9PiAkcywgImZvdW5kX21hdGNoIiA9PiB0cmltKCRtWzBdKSwgImNvbnZlcnRlZCIgPT4gJG1bMV0gLiAkcDNdKTsKICAgICAgICBlY2hvICJcbiI7CiAgICB9IGVsc2UgewogICAgCWVjaG8gIk5vIG1hdGNoIGZvciAnJHMnIVxuIjsKIAogICAgfQp9CiAKZnVuY3Rpb24gYnVpbGROdW1DaGFpbigkYXJyKSB7CiAgICAkcmV0ID0gIiI7CiAgICAkcm5nbnVtID0gIiI7CiAgICBmb3IgKCRpPTA7ICRpIDwgY291bnQoJGFycik7ICRpKyspIHsKICAgICAgICAkdmFsID0gJGFyclskaV07CiAgICAgICAgJHBhcnQgPSAiIjsKICAgICAgICBpZiAocHJlZ19tYXRjaCgnfl4oXGQrKD86XC5cZCspPykoW0EtWl0/KSR+aScsICR2YWwsICRtcykpIHsKICAgICAgICAJJHZhbCA9ICRtc1sxXTsKICAgICAgICAJaWYgKCFlbXB0eSgkbXNbMl0pKSB7CiAgICAgICAgCQkkcGFydCA9ICcgcGFydCAnIC4gKG9yZChzdHJ0b2xvd2VyKCRtc1syXSkpIC0gOTYpOwogICAgICAgIAl9CiAgICAgICAgfQogICAgICAgICR2YWwgPSAkdmFsICsgMDsKICAgICAgICBpZiAoKCRpIDwgY291bnQoJGFycikgLSAxKSAmJiAkdmFsID09ICgkYXJyWyRpKzFdICsgMCkgLSAxKSB7CiAgICAgICAgICAgIGlmIChlbXB0eSgkcm5nbnVtKSkgIHsKICAgICAgICAgICAgICAgICRyZXQgLj0gKCRpID09IDAgPyAiIiA6ICIgJiAiKSAuICR2YWw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHJuZ251bSA9ICR2YWw7CiAgICAgICAgfSBlbHNlIGlmICghZW1wdHkoJHJuZ251bSkgfHwgJGkgPT0gY291bnQoJGFycikpIHsKICAgICAgICAgICAgJHJldCAuPSAnLScgLiAkdmFsOwogICAgICAgICAgICAkcm5nbnVtID0gIiI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHJldCAuPSAoJGkgPT0gMCA/ICIiIDogIiAmICIpIC4gJHZhbCAuICRwYXJ0OwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAkcmV0Owp9