用Laravel或PHP将一行替换为另一行



所以我有一个文本文件,内容看起来,例如,如下所示:

姓名:John,

姓氏:Doe,

年龄:35

但是我不确定当前的姓氏是否是Doe,任何东西都可能在那里生成。

我需要用另一个姓氏替换这个姓氏。因此,我需要以某种方式打开文件,找到我需要的位置(我确信它以Surname: '开始,以',结束,并且我需要在这两个子字符串之间替换字符串,无论它以前是什么,而不会破坏文件结构(丢失换行符等;实际文件很长,所以手动添加不是一个选项)。

到目前为止,我已经尝试过这个

$content = file_get_contents('text.txt');
$search = "/[^Surname: '](.*)[^',]/";
$replace = 'Smith';
$content = preg_replace($search,$replace,$content);
file_put_contents('text.txt', $content);

但它几乎用"Smith"替换了所有内容,因为',的组合在这个文件中很常见,而且它还将整个文件变成了一行。

那么我能做些什么来解决我的问题呢?非常感谢任何可能的帮助!

UPD:str_replace可能是我所需要的,但首先我需要从文件中检索整行Surname: 'Doe',以获得当前姓氏。

我会根据您的描述使用正则表达式/^Surname: '.*',$/m,并将其替换为Surname: 'Smith',

代码:

<?php
$content = file_get_contents('text.txt');
$search = "/^Surname: '.*',$/m";
$replace = "Surname: 'Smith',";
$content = preg_replace($search, $replace, $content);
file_put_contents('text.txt', $content);

演示:

$ cat text.txt
Name: 'John',
Surname: 'Doe',
Age: 35
$ php a.php
$ cat text.txt
Name: 'John',
Surname: 'Smith',
Age: 35

这个正则表达式应该有帮助:

"/Surname: '(.*)'/"
$text = "Name: 'John',
Surname: 'Doe',
Age: 35";
$search = "/Surname:s+'(.*?)',/is";
$replace = 'Surname: 'Smith',';
$content = preg_replace($search, $replace, $text);
echo $content;

相关内容

  • 没有找到相关文章

最新更新