新手数字范围的正则表达式问题

时间:2010-09-13 18:40:45

标签: php regex

我真的应该对我的正则表达式有所了解,但现在任何人都可以帮忙解决这个问题......

((2,3,4,11,8),(5,44,67,78,32,22,111,234))

如您所见,每个数字范围都以逗号分隔,在本例中,有两个数字范围。

在实时场景中,可能会有很多数字和少数范围。

那么......我如何将这样的东西提取到php嵌套数组或类似的东西中呢?

任何帮助表示赞赏

2 个答案:

答案 0 :(得分:5)

明智地使用explode()并按照以下方式执行:

$ranges = '((2,3,4,11,8),(5,44,67,78,32,22,111,234))';

//break into groups
$array = explode('),(', $ranges);

//trim any parenthesis left and then split by comma ,
foreach($array as &$group)
    $group = explode(',',trim($group, '()'));

//display result
var_dump($array);

输出:

array
  0 => 
    array
      0 => string '2' (length=1)
      1 => string '3' (length=1)
      2 => string '4' (length=1)
      3 => string '11' (length=2)
      4 => string '8' (length=1)
  1 => &
    array
      0 => string '5' (length=1)
      1 => string '44' (length=2)
      2 => string '67' (length=2)
      3 => string '78' (length=2)
      4 => string '32' (length=2)
      5 => string '22' (length=2)
      6 => string '111' (length=3)
      7 => string '234' (length=3)

答案 1 :(得分:3)

$input = str_replace(array('(', ')'), array('[', ']'), $input);
$output = json_decode($input);

这可能也有效