我不知道为什么但是当我执行脚本时它没有正确显示行。它只是给出了可变线的最后一行,而没有输入。我忽略了什么吗?
<?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
答案 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);
?>
另外,请注意正则表达式的更改 - 我不是最好的正则表达式,但在测试原始表达式后,它与锚^
不匹配。