php需要正则表达式的帮助

php需要正则表达式的帮助,php,regex,Php,Regex,我想在PHP中解析和扩展给定的字符串 从 到 有人能帮我吗?提前谢谢 你的问题不是很清楚,但我认为你指的是这样的解决方案: 编辑:现在显示了孔范围,而不仅仅是指定的编号 <?php $string = "0605052&&-5&-7&-8"; $test = '/^([0-9]+)\&+/'; preg_match($test, $string, $res); if (isset($res[1])) {

我想在PHP中解析和扩展给定的字符串


有人能帮我吗?提前谢谢

你的问题不是很清楚,但我认为你指的是这样的解决方案:

编辑:现在显示了孔范围,而不仅仅是指定的编号

<?php
    $string = "0605052&&-5&-7&-8";
    $test = '/^([0-9]+)\&+/';
    preg_match($test, $string, $res);

    if (isset($res[1]))
    {
        $nr = $res[1];

        $test = '/\&\-([0-9])/';
        preg_match_all($test, $string, $res);

        $result[] = $nr;
        $nrPart = substr($nr, 0, -1);
        $firstPart = substr($nr, -1);

        if (isset($res[1]))
        {
            foreach ($res[1] as &$value)
            {
                if ($firstPart !== false)
                {
                    for ($i=$firstPart+1; $i<=$value; $i++)
                    {
                        $nr = $nrPart . $i;
                        $result[] = $nr;
                    }
                    $firstPart = false;
                }
                else
                {
                    $nr = $nrPart . $value;
                    $result[] = $nr;
                    $firstPart = $value;
                }
            }
        }
        var_dump($result);
    }
?>

这提供了:
结果[0]=“0605052”
结果[1]=“0605053”
结果[2]=“0605054”
结果[3]=“0605055”
结果[4]=“0605057”

结果[5]=“0605058”

我认为多步骤方法是最好的选择

例如,以此为例
0605052&&-5&-7&-8

  • -
    处拆分。结果将是
    0605052&&
    5&
    7&
    8
  • 第一个结果
    0605052&&
    将帮助您创建基础。只需找到第一个出现的
    &
    并将子串添加到下一个最后一个数字即可。结果将是
    060505
    。您还需要最后一个数字,因此也需要它(在本例中为
    2
  • 现在获取剩余的结尾,所有
    \d&
    都很容易获取,只需获取字符串的第一个字符(或者如果这些字符可以是多个数字,请再次使用第一次出现的
    &
    方法的子字符串)
  • 最后一个数字很简单:它是
    8
  • 现在你有了所有重要的价值观。您可以生成您的结果:

    2中的最后一个数字,3中的所有数字。数字是从4开始的。和你的基地一起是第一部分。此外,您需要从最后一个数字2生成所有数字。第一个结果是3。在循环中按步骤1进行,并将其附加到基中

    示例代码:

    
    
    输出:

    0605052
    0605053
    0605054
    0605055
    0605057
    0605058
    

    试着在写你的问题时多下点功夫。更清楚地说明你需要什么,你是如何实现它的,给出你的预期产出和实际产出的例子。试着让它在你自己身上发挥作用,并带来更具体的东西。因此,这不是代码编写服务。:)你想从0605052&&-5&-7&-8中得到0605052??你缺少060553、0605054,它们是由基数的最后一个数字和第一个数字之间的差值生成的。在@MYGz编辑之前,这个问题不清楚,所以我认为对于每一个&-x,只有一个结果,而不是每两个$-x都有一个结果范围。
    <?php
        $string = "0605052&&-5&-7&-8";
        $test = '/^([0-9]+)\&+/';
        preg_match($test, $string, $res);
    
        if (isset($res[1]))
        {
            $nr = $res[1];
    
            $test = '/\&\-([0-9])/';
            preg_match_all($test, $string, $res);
    
            $result[] = $nr;
            $nrPart = substr($nr, 0, -1);
            $firstPart = substr($nr, -1);
    
            if (isset($res[1]))
            {
                foreach ($res[1] as &$value)
                {
                    if ($firstPart !== false)
                    {
                        for ($i=$firstPart+1; $i<=$value; $i++)
                        {
                            $nr = $nrPart . $i;
                            $result[] = $nr;
                        }
                        $firstPart = false;
                    }
                    else
                    {
                        $nr = $nrPart . $value;
                        $result[] = $nr;
                        $firstPart = $value;
                    }
                }
            }
            var_dump($result);
        }
    ?>
    
    0605052
    0605053
    0605054
    0605055
    0605057
    0605058