我有这样的文本文件。
;[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=
我想删除8行以此行开头“context = TRK_E0_TDM”。
我想要的结果是:
;[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));
?>
答案 0 :(得分:0)
preg_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=
Bonus 动态删除的扩展解决方案:
$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);