preg_match_all不会给出结果

时间:2016-03-17 10:03:13

标签: php html regex

我不知道为什么但是当我执行脚本时它没有正确显示行。它只是给出了可变线的最后一行,而没有输入。我忽略了什么吗?

<?php
    $stop = '06BAH';
    $input = file_get_contents('File1.txt'); 
    $lines = file('File2.txt'); 

    for ($i=0; $i < count($lines); $i++) { 
        preg_match_all("/^($lines[$i].*)$stop/msU", $input, $matches);
    }
?>

File1中:

06BAH  TOI00123-11-134-B                        OP_SIGNAGE                                       10  
05  6       00132-12-172-A                4                                                                                    PON
05  7       00127-22-683-A                3                                                                                   PON
05  9       00927-62-133-A                11                                                                                    PON
05  18      00227-72-542-A                8                                                                                   PON
06BAH   TOI00877-27-836-C                        OP_SIGNAGE                                      10 
05  122     00238-92-963-A                3                                                                                    PON
05  173     00124-65-832-A                2                                                                                    PON
06BAH   TOI00112-54-980-B                        OP_SIGNAGE                                      10 

文件2:

TOI00123-11-134-B
TOI00112-54-980-B

输出:

06BAH   TOI00123-11-134-B                        OP_SIGNAGE                                       10  
05  6       00132-12-172-A                4                                                                                    PON
05  7       00127-22-683-A                3                                                                                   PON
05  9       00927-62-133-A                11                                                                                    PON
05  18      00227-72-542-A                8                                                                                   PON
06BAH   TOI00112-54-980-B                        OP_SIGNAGE                                       10 

1 个答案:

答案 0 :(得分:1)

您的问题是,虽然您将结果存储在$matches中,但每次循环迭代时都会覆盖$matches

你应该遵循以下方针:

<?php
$stop = '06BAH';
$input = file_get_contents('file1.txt'); 
$lines = file('file2.txt'); 
$caught = []; 

for ($i=0; $i < count($lines); $i++) { 
    preg_match_all("/(".trim($lines[$i]).".*)".trim($stop)."/msU", $input, $matches);
    foreach($matches as $key => $value) {
        $caught[$i] = $value;
    }
}

var_dump($caught);

?>

另外,请注意正则表达式的更改 - 我不是最好的正则表达式,但在测试原始表达式后,它与锚^不匹配。