Php 如何删除文件中的所有行,直到出现特定单词

Php 如何删除文件中的所有行,直到出现特定单词,php,file,Php,File,我有多个包含相同文本结构的文件。我现在尝试删除所有行,直到一行以特定单词开头。 这是其中一个文件的一部分: Test Sampertant ALL 5784 COMMENT This files contains information about infomarxinc COMMENT Companie located in USA FEATURES Location/Qualifiers A

我有多个包含相同文本结构的文件。我现在尝试删除所有行,直到一行以特定单词开头。 这是其中一个文件的一部分:

Test        Sampertant
ALL         5784
COMMENT     This files contains information about infomarxinc
COMMENT     Companie located in USA
FEATURES               Location/Qualifiers
     A               lines (7709..2170)
     3'try           complement(7676..7678)
                     /note="stop"
                     /label=STOP
     B               lines (7679..7708)
                     /note="stop"
                     /label=start
PAST
        1 talian and American multinational corporation and is the world’s 
       50 eighth largest auto maker.The group was established in late 2014
我只想保留过去的台词 为此,我编写了以下代码

$lines = file($newname);

# Loop through the array
foreach($lines as $line) { 

$seq = trim($line);

    # Find all lines starting with a number
    if (preg_match('/^\d/', $seq)){ 
        # Replace all number with | 
        $seq = preg_replace('/[0-9]+/', '', $seq);
        $seq = preg_replace('/\s/',"",$seq);

        # Store in string
        $out .= $seq;
    } 
### Read lines into file ###
    $f = fopen($newname, "w");
    fwrite($f, $out);
    fclose($f);
} 
在我拿到这个文件之前,大多数文件都是有效的。零件前的一行以3'try开头。在我的最终结果中,也增加了3分,但我不想这样现在如何删除所有行,直到我的行以过去的行开始,然后执行代码以查找所有以数字开头的行。 要仅保留此文件的这些行,请执行以下操作:

 1 talian and American multinational corporation and is the world’s 
 50 eighth largest auto maker.The group was established in late 2014

您只需添加一个额外的逻辑位,以便在写出编号的行之前首先找到“PART”行:


也许我遗漏了一些东西,但以下几点应该有用:

$raw = file_get_contents($filename);
if (! $raw) {
    echo 'no valid data';
    exit;
}
$cut = strpos($raw,'PAST');
if (! $cut) {
    echo 'PAST not found in file';
    exit;
}
echo substr($raw,$cut + 5);
exit;
另一个选项,如您所说,所有文件都具有相同的结构:

$raw = file_get_contents($filename);
if (! $raw) {
    echo 'no valid data';
    exit;
}
$lines = explode("\n",$raw); // assume \n as the line return
$lines = array_splice($lines,13);
echo join("\n",$lines);
exit;

你说的:是什么意思?然后执行我的代码,找到所有以数字开头的行?建议:逐行阅读文件。检查每一行是否与
过去相同\n
。一旦检查成功,抓取之后的所有行。完成。不需要正则表达式,只要一个非常简单的
if
。我只想保留数字1和50代表的行。“尼莫,这确实是过去了。”那是另外一个问题。但也很容易解决。修剪线条,在空格上拆分,用类似的方法检查第一个元素。完成。或转换为
int
并检查其是否在[1..50]范围内。无论你需要什么。在这个文件的情况下,它将工作,但如果我有一个文件,其中的数字不在范围1..50。这是行不通的。每个文件的数字都是随机的。
$raw = file_get_contents($filename);
if (! $raw) {
    echo 'no valid data';
    exit;
}
$lines = explode("\n",$raw); // assume \n as the line return
$lines = array_splice($lines,13);
echo join("\n",$lines);
exit;