fork download
  1. <?php
  2.  
  3. $re = '~c(?<start>\d+(?:\[\d+])?)(?:-(?<end>(?&start)?))?~';
  4. $str = "c2,c3-5,c6[2],c8[4]-10,c14-21[5]";
  5. preg_match_all($re, $str, $matches);
  6. $res = array_map(function($ms, $me) {
  7. return array("start" => $ms, "end" => $me);
  8. }, $matches["start"], $matches["end"]);
  9. print_r($res);
Success #stdin #stdout 0.02s 52472KB
stdin
Standard input is empty
stdout
Array
(
    [0] => Array
        (
            [start] => 2
            [end] => 
        )

    [1] => Array
        (
            [start] => 3
            [end] => 5
        )

    [2] => Array
        (
            [start] => 6[2]
            [end] => 
        )

    [3] => Array
        (
            [start] => 8[4]
            [end] => 10
        )

    [4] => Array
        (
            [start] => 14
            [end] => 21[5]
        )

)