fork(1) download
  1. <?php
  2.  
  3. $strs = ['c0', 'c0-3', 'c0+3', 'c0 & 9', 'c0A'];
  4. $terms = ['episode', 'chapter', 'ch', 'ep', 'c', 'e', ''];
  5.  
  6. $chapter_main_rx = "(?|" . implode("|", array_map(function ($term) {
  7. return strlen($term) > 0 ? "(" . substr($term, 0, 1) . ")(" . substr($term, 1) . "s?)": "()()" ;},
  8. $terms)) . ")\s*";
  9. $chapter_aux_rx = "(?:" . implode("|", array_map(function ($term) {
  10. return strlen($term) > 0 ? substr($term, 0, 1) . "(?:" . substr($term, 1) . "s?)": "" ;},
  11. $terms)) . ")\s*";
  12.  
  13. $reg = "~$chapter_main_rx((\d+(?:\.\d+)?(?:[A-Z]\b)?)(?:\s*(?:[,&+-]|and)\s*(?:$chapter_aux_rx)?(?4))*)~ui";
  14.  
  15. foreach ($strs as $s) {
  16. if (preg_match($reg, $s, $m)) {
  17. "~(\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) {
  18. return strlen($x[3]) > 0 ? buildNumChain(preg_split("~\s*(?:[,&+]|and)\s*(?:$chapter_aux_rx)?~ui", $x[0]))
  19. : (strlen($x[1]) > 0 ? ($x[1] + 0) : $x[1]) . (strlen($x[2]) > 0 ? ord(strtolower($x[2])) - 96 : "") . "-";
  20. }, $m[3]);
  21. print_r(["original" => $s, "found_match" => trim($m[0]), "converted" => $m[1] . $p3]);
  22. echo "\n";
  23. } else {
  24. echo "No match for '$s'!\n";
  25.  
  26. }
  27. }
  28.  
  29. function buildNumChain($arr) {
  30. $ret = "";
  31. $rngnum = "";
  32. for ($i=0; $i < count($arr); $i++) {
  33. $val = $arr[$i];
  34. $part = "";
  35. if (preg_match('~^(\d+(?:\.\d+)?)([A-Z]?)$~i', $val, $ms)) {
  36. $val = $ms[1];
  37. if (!empty($ms[2])) {
  38. $part = ' part ' . (ord(strtolower($ms[2])) - 96);
  39. }
  40. }
  41. $val = $val + 0;
  42. if (($i < count($arr) - 1) && $val == ($arr[$i+1] + 0) - 1) {
  43. if (empty($rngnum)) {
  44. $ret .= ($i == 0 ? "" : " & ") . $val;
  45. }
  46. $rngnum = $val;
  47. } else if (!empty($rngnum) || $i == count($arr)) {
  48. $ret .= '-' . $val;
  49. $rngnum = "";
  50. } else {
  51. $ret .= ($i == 0 ? "" : " & ") . $val . $part;
  52. }
  53. }
  54. return $ret;
  55. }
Success #stdin #stdout #stderr 0.03s 23852KB
stdin
Standard input is empty
stdout
Array
(
    [original] => c0
    [found_match] => c0
    [converted] => c0
)

Array
(
    [original] => c0-3
    [found_match] => c0-3
    [converted] => c0-3
)

Array
(
    [original] => c0+3
    [found_match] => c0+3
    [converted] => c0 & 3
)

Array
(
    [original] => c0 & 9
    [found_match] => c0 & 9
    [converted] => c0 & 9
)

Array
(
    [original] => c0A
    [found_match] => c0A
    [converted] => c0 part 1
)

stderr
PHP Notice:  Undefined offset: 3 in /home/EAY4Hr/prog.php on line 19