PHP 字符串仅在某些行上替换

我目前有一个这样的文件。


[Line 1] Hello

[Line 2] World

[Line 3] Hello World

我希望查找所有包含“Hello”的行,即第 1 行和第 3 行。


然后我想在该行上将所有“行”的情况更改为“已更改”,因此输出将是


[Changed 1] Hello

[Line 2] World

[Changed 3] Hello World

第二行保持不变。我目前有代码可以找到其中包含 Hello 的所有行,但我不确定如何单独编辑这些行而不是其他行。

例如,下面的代码确实找到了所有行,但也删除了带有 str_replace 的进程中的所有内容,所以我知道这不是我要查找的 str_replace。


$lines = file("lines.html");

$find = "Hello";

$repl = "Changed";

foreach($lines as $key => $line)

  if(stristr($line, $find)){$line = str_replace("$find","$repl",$line);}


梦里花落0921
浏览 118回答 2
2回答

斯蒂芬大帝

这是一个快速的方法 if$find = "Hello";和$repl = "Changed";:$result = preg_replace("/\[Line (\d+\].*?$find.*)/", "[$repl $1", file("lines.html"));file_put_contents("lines.html", $result);匹配[Line并捕获一位或多位()数字\d+然后是任何东西.*?,然后是$find字符串,然后是任何.*捕获所有内容的东西替换为[ $repl和捕获的内容$1

鸿蒙传说

要更改任何内容,您必须使用现有行和新更改的行编写一个新文件。这是一个简单的例子// create a new output file$out = fopen('test2.txt', 'w');$input = file("lines.html");$find = "Hello";foreach($input as $key => $line){    $tmp = $line;    if(stristr($line, $find)){        $tmp = str_replace('[Line', '[Changed', $line);        // or if `[Line` can appear more than once in the line        //$tmp = substr_replace($line, '[Changed', 0, 5);    }    fwrite($out, $tmp);}fclose($out);结果[Changed 1] Hello[Line 2] World[Changed 3] Hello World
打开App,查看更多内容
随时随地看视频慕课网APP