所以我有一个文本文件,内容看起来,例如,如下所示:
姓名: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;