我有一个文本文件,它总是包含如下行:
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');
答案 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;
}
答案 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