file_get_contents()with newLine for Regex

时间:2015-09-03 09:32:45

标签: php regex

我有一个名为 mail.txt 的文件,其中包含以下内容:

From: elvis@tabloid.org (The King)
Subject: be seein' ya around
Date: Mon, 23 Oct 2006 11:04:13
From: The Prez <president@whitehouse.gov>
Date: Wed, 25 Oct 2006 8:36:24
Subject: now, about your vote

我正在使用 Sublime Text ,其中正则表达式^\w+:正常工作。

我正在使用 file_get_contents() 来阅读 mail.txt 中的内容,然后将相同的正则表达式用于 preg_replace() < / strong>突出显示输出。

问题是,当我使用 file_get_contents() 时,它不会考虑\n,为此我尝试了nl2br(),但这不起作用任

以下是Sublime和PHP中的输出:

  • 卓异

enter image description here

  • PHP

enter image description here

以下是PHP代码:

<?php  
    $path = "./mail.txt";
    if(!file_exists($path))
        die("File does not exist");
    else {
        if(!($handle = fopen($path, "r")))
            die("File could not be opened");
        else {
            $file_data = file_get_contents($path);
        }
    }
    $mod_file = preg_replace("/^\w+:/", "<span class='replaced'>$0</span>", $file_data);
    echo "<pre>".$mod_file."</pre>";
?>

如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

您需要使用mMultiline标记。请参阅演示。

https://regex101.com/r/cT0hV4/12

$re = "/^\\w+:/m"; 
$str = "From: elvis@tabloid.org (The King)\nSubject: be seein' ya around\nDate: Mon, 23 Oct 2006 11:04:13\nFrom: The Prez <president@whitehouse.gov>\nDate: Wed, 25 Oct 2006 8:36:24\nSubject: now, about your vote"; 

preg_match_all($re, $str, $matches);