如果在PHP中以特定字符串开头,如何覆盖一行?

时间:2017-10-08 01:27:01

标签: php

我有一个名为logs.txt的文本文件,我正在尝试在PHP中创建一个脚本,该脚本应该检查是否存在以foo||开头的字符串。如果存在,则应替换为特定字符串,否则将在文件末尾添加特定字符串。

这是我试图制作的代码:

<?php

function replaceInFile($what, $with, $file){
    $buffer = "";
    $fp = file($file);
    foreach($fp as $line){
        $buffer .= preg_replace("|".$what."[A-Za-z_.]*|", $what.$with, $line);
    }
    fclose($fp);
    echo $buffer;
    file_put_contents($file, $buffer);
}

replaceInFile("foo||", "foo||hello", "logs.txt");

?>

但它并没有真正做我想要的。有人可以帮我修复代码吗?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

这应该有效:

$newline = preg_replace('/^' . $what . '(.*)$/', $with . '${1}', $line, 1 , $count);
$buffer .= ($count == 1) ? $newline : $line . $with;

如果您的搜索条件中包含/,则常见分隔符为||。您需要创建一个捕获组,这需要在()之间。现在,您可以使用此捕获组,并将其替换为捕获组${ +编号+ }。在你的情况下,你只有一个。