为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
梦里花落0921 2023-04-21 13:31:27
我目前有一个这样的文件。[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);}
查看完整描述

2 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

这是一个快速的方法 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


查看完整回答
反对 回复 2023-04-21
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

要更改任何内容,您必须使用现有行和新更改的行编写一个新文件。这是一个简单的例子


// 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


查看完整回答
反对 回复 2023-04-21
  • 2 回答
  • 0 关注
  • 113 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信