在PHP中找到匹配后获取一行

时间:2014-02-18 08:36:16

标签: php regex parsing

我有一个文本文件,它总是包含如下行:

CODICE FISCALE DATA DI STAMPA

01097800625

...
...

CODICE FISCALE

FRRVCN68S14E487E <------------------------I need this line
DATA ASSUNZIONE DATA

我会解析文本以获得标记的行。我试图在“CODICE FISCALE”和“DATA ASSUNZIONE DATA”之间分解文本,但它不起作用。 有什么建议吗?

function getBetween($content,$start,$end){
    $r = explode($start, $content);

    if (isset($r[1])){
        $r = explode($end, $r[1]);
        return $r[0];
    }
    return '';
}
$newName     = getBetween($fileContent,'CODICE FISCALE','DATA ASSUNZIONE DATA');

6 个答案:

答案 0 :(得分:1)

虽然我更喜欢其他解决方案,但如果你想使用正则表达式,你可以使用

/^CODICE FISCALE\n([\s\S]+)DATA ASSUNZIONE DATA/m

demo @ phpliveregex
demo @ regex101

例如使用preg_match_all

preg_match_all("/^CODICE FISCALE\n([\s\S]+)DATA ASSUNZIONE DATA/m", $input_lines, $output_array);

您甚至可以重构getBetween函数:

function getBetween($content,$start,$end){  
    preg_match_all("/^".$start."\n([\s\S]+)".$end."/m", $content, $output);
    return $output;
}

working example @ phpfiddle

答案 1 :(得分:1)

preg_match('/CODICE FISCALE\n(.*?)DATA ASSUNZIONE DATA/s', $fileContent, $match);
$match[1] contains your line.

在此处查看演示:Demo

答案 2 :(得分:0)

您可以使用简单的explode()

通过以下代码执行此操作
$file_content = file_get_contents("your_file.txt");
$file_content_separated_by_special_word = explode("\nCODICE FISCALE", $file_content);
$res = explode("\n", ltrim($file_content_separated_by_special_word[1]));

我爆炸了“\ nCODICE FISCALE”,因为“CODICE FISCALE”在首次出现时爆炸。

您可以看到工作演示here

答案 3 :(得分:0)

使用fegts,您可以从文件中获取单个内容。如果找到“DATA ASSUNZIONE DATA”行,您可以构建类似流解析器的东西并设置标记。然后返回或存储下一个非空行并重置该标记。这样你也可以在包含多个块的文件中找到这些行('CODICE FISCALE ... DATA ASSUNZIONE DATA')。

this JSON parsers source上查看示例以获取sn灵感如何设置此类脚本。

答案 4 :(得分:0)

此函数将在某些文本后获取该行,如果未找到则返回null。

function getLineAfter($file_path, $line) {
    $lines = file($file_path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    if (($key = array_search($line, $lines)) !== false && isset($lines[$key + 1])) {
        return $lines[$key + 1];
    }
    return null;
}

用法:

echo getLineAfter('somefile.txt', 'CODICE FISCALE');

答案 5 :(得分:0)

我建议您尝试使用explode()(文档可以是found here),而不是使用preg_match()

以下是显示其实际效果的PHP代码:

$string = <<<EOS
CODICE FISCALE DATA DI STAMPA

01097800625

...
...

CODICE FISCALE

FRRVCN68S14E487E
DATA ASSUNZIONE DATA
EOS;

preg_match("/\n(.*)\nDATA ASSUNZIONE DATA/", $string, $matches);
print 'I need this line: ' . $matches[1] . "\n";

这将在您的字符串中搜索换行符,然后在一行上显示一堆文本,然后是换行符,然后是“DATA ASSUNZIONE DATA”。 (.*)捕获的文本被捕获到数组元素$matches[1]中。

以下是代码运行的输出:

I need this line: FRRVCN68S14E487E