如何使用Regex解析打印预览等页码

时间:2014-02-05 10:22:53

标签: php regex

如果你想在windows / office上打印任意页面,你可以像在图片中那样定义:

enter image description here

因此,这将打印页面:1,2,3,6,7,8

现在,我正在尝试使用Regex做同样的事情

<?php
$str = "1-4,6,7,8";

        preg_match('/((\d+-\d+)|(\d+)),((\d+-\d+)|(\d+))/',$str,$out);

        print_r($out);
?>

并打印

Array ( [0] => 1-4,6 [1] => 1-4 [2] => 1-4 [3] => [4] => 6 [5] => [6] => 6 )

但我希望是以下

Array ( [0] => 1-4 [1] => 6, [2] => 7, [3] => 7 )

我该怎么做?

以下是fiddle

3 个答案:

答案 0 :(得分:3)

请检查此正则表达式模式

$str = "1-4,6,7,8";

preg_match('/((\d+-\d+)|(\d+)),?/',$str,$out);

print_r($out);

或更好地使用explode功能:

$str = "1-4,6,7,8";

$out = explode(',', $str);

print_r($out);

答案 1 :(得分:0)

这应该可以解决问题:

(\d+)-?(\d*)?(,(?!$))?


  1. 匹配1个或多个号码(必填)。
  2. 连字符的可选匹配。
  3. 第二组数字的可选匹配。
  4. 每组数字后面的可选逗号,但最后不允许使用逗号。

  5. DEMO

答案 2 :(得分:0)

使用此:

$str = "1-4,6,7,8";
preg_match_all('/(\d+(?:-\d+)?),?/', $str, $out);
print_r($out);

<强>输出:

Array
(
    [0] => Array
        (
            [0] => 1-4,
            [1] => 6,
            [2] => 7,
            [3] => 8
        )

    [1] => Array
        (
            [0] => 1-4
            [1] => 6
            [2] => 7
            [3] => 8
        )

)