【问题标题】:Iterating with regex用正则表达式迭代
【发布时间】:2014-11-12 23:51:14
【问题描述】:

我正在尝试循环直到找到所需的字符串,但脚本停止并且不循环。这里有什么问题?

<?php

class foo {
    function somefunction() {
        $script =  dirname(__FILE__)."/script.sh";
        exec($script, $result);
        $result = array_map('trim', $result);

        $var1 = $result[2];
        $var2 = $result[4];

        $reg="/^String1/";

        if(preg_match($reg,$var2)) {
            return array('variable1'=>$var1, 'variable2'=>$var2);
            echo "<pre>\n";
        }

    else{
        while(!preg_match('/^String1/',$var2)) {
            $bar = new foo;
        }
    }
}
   } 
$bar=new foo;
print_r($bar->somefunction());

?>

我想要实现的示例:

循环:

1.嗨

2.你好

3.String1(返回 this-regex 匹配)

4.嘿嘿

5.String1(返回 this-regex 匹配)

更新:我必须增加 xdebug.max_nesting_level 否则它会返回“最大函数嵌套级别”错误

【问题讨论】:

    标签: php regex loops


    【解决方案1】:

    问题是你总是在第一个 if 语句中找到匹配项:

    if(preg_match($reg,$var2))
    

    然后你返回你的函数,所以它永远不会命中:

    return array('variable1'=>$var1, 'variable2'=>$var2);
    

    由于preg_match 已经返回了一个匹配数组,你应该可以这样做:

    class foo {
        function somefunction() {
            $script =  dirname(__FILE__)."/script.sh";
            exec($script, $result);
            $result = array_map('trim', $result);
    
            $var1 = $result[2];
            $var2 = $result[4];
    
            $reg="/^String1/";
    
            if(preg_match($reg,$var2,$matches)) {
                return $matches;
            } else {
                $bar = new foo;
                return $bar->somefunction();
            }
        }
    }
    

    ...只是我对 $var1 和 $var2 的作用以及为什么要显式引用该数组中的第 2 和第 5 个元素感到有些困惑?

    【讨论】:

    • 我实际上正在修改这个github.com/RobKohr/PHP-Bitcoin-Address-Creator
    • 字符串不匹配时返回false
    • 对 - 会的。我想我看不到调用类的新实例(就像您在原始 while 循环中所做的那样)会返回不同的结果?但是,请参阅更新。
    猜你喜欢
    • 1970-01-01
    • 2013-05-24
    • 2022-06-23
    • 1970-01-01
    • 1970-01-01
    • 2015-04-18
    • 2021-02-20
    • 2015-09-24
    • 1970-01-01
    相关资源
    最近更新 更多