如何使用PHP删除文本文件中的多行(串行)?

如何使用PHP删除文本文件中的多行(串行)?,php,Php,我有这样的文本文件 ;[Teca-E1] context=TRK_E0_TDM1 channel=17-31 context=TRK3 group=0 channel=1-15 group=3 ;cgoi=15v15r ;status= ;[Teca-E1] context=TRK_E1_TDM2 channel=48-62 context=TRK3 group=1 channel=32-46 group=3 ;cgoi=15v15r ;status= ;[Teca-E1] context=TR

我有这样的文本文件

;[Teca-E1]
context=TRK_E0_TDM1
channel=17-31
context=TRK3
group=0
channel=1-15
group=3
;cgoi=15v15r
;status=
;[Teca-E1]
context=TRK_E1_TDM2
channel=48-62
context=TRK3
group=1
channel=32-46
group=3
;cgoi=15v15r
;status=
;[Teca-E1]
context=TRK_E2_TDM3
channel=79-93
context=TRK3
group=2
channel=63-77
group=3
;cgoi=15v15r
;status=
我想删除以这行“context=TRK\u E0\u TDM”开头的8行

我想要的结果是:

;[Teca-E1]
context=TRK_E1_TDM2
channel=48-62
context=TRK3
group=1
channel=32-46
group=3
;cgoi=15v15r
;status=
;[Teca-E1]
context=TRK_E2_TDM3
channel=79-93
context=TRK3
group=2
channel=63-77
group=3
;cgoi=15v15r
;status=
为了便于拍摄,我在下面有一张图片:

我写的PHP代码,它可以删除特定的行,但我不知道如何删除特定的组

这意味着:

  • 我想删除组1并保留组2和3

  • 或者我想删除组2并保留组1和组3

  • 或者我想删除组3并保留组1和组2

提前谢谢

以下是我的PHP代码:

<?php
$f = "trunk_e1.txt";

$term = "context=TRK_E0_TDM";

$arr = file($f);

foreach ($arr as $key=> $line) {

    //removing the line
    if(stristr($line,$term)!== false){
        unset($arr[$key]);
        break;
    }
}

//reindexing array
$arr = array_values($arr);

//writing to file
file_put_contents($f, implode($arr));
?>

带有
preg\u replace
功能的简短解决方案:

$data = file_get_contents('trunk_e1.txt');
$result = preg_replace('/^.*context=TRK_E0_TDM.*(?=;\[Teca\-E1\]\s*context=TRK_E1_TDM2)/s', '', $data);
file_put_contents('trunk_e1.txt', $result);

最终
trunk_e1.txt
内容:

;[Teca-E1]
context=TRK_E1_TDM2
channel=48-62
context=TRK3
group=1
channel=32-46
group=3
;cgoi=15v15r
;status=
;[Teca-E1]
context=TRK_E2_TDM3
channel=79-93
context=TRK3
group=2
channel=63-77
group=3
;cgoi=15v15r
;status=

奖金动态删除扩展解决方案:

$data = file_get_contents('empty.txt');
$group_id = 1;   // from 0 to ...
$pat = '/^(.*);\[Teca\-E1\]\s*context=TRK_E'. $group_id. '_TDM.*?(?=;\[Teca\-E1\]\s*context=TRK_|$)/s';
$result = preg_replace($pat, '$1', $data);
file_put_contents('empty.txt', $result);

有几种方法可以做到这一点,比如将第一个有效行复制到一个新数组中并保存,找到所需的行和索引,并对数组进行切片,等等,但我有一个问题。如何删除;[Teca-E1]上下文=TRK_E1_TDM1…….--->;状态=确定后;[Teca-E1]上下文=TRK_E0_TDM???@NguyễnTrầNthanl–m,如果您有新的条件,您应该将其添加到您的问题中。当它完成时,让我知道它工作了,我不能删除组1并保留组2和组3,但我不能删除组2并保留组1和组3。或者我无法删除组3并保留组1和2:(我再次编辑了我的问题,我认为我的问题对你来说不清楚。你能读一下并帮助我:D@NguyễnTrầNthanl–m,我的解决方案给出了预期的结果。你想从我这里得到什么?