用正则表达式迭代

时间:2014-11-12 23:51:14

标签: php regex loops

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

<?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.Hello

3.String1(返回此正则表达式匹配)

4.heyya

5.String1(返回此正则表达式匹配)

更新:我不得不增加xdebug.max_nesting_level否则返回'最大函数嵌套级别'错误

1 个答案:

答案 0 :(得分:0)

麻烦的是,你总是找到与你的第一个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个元素感到有些困惑?