所以我有内容看起来的文本文件,例如,如下所示:
姓名:' John',
姓:' Doe',
年龄:35
但是我不确定当前的姓氏是否是Doe ,那里可以生成任何东西。
我需要用另一个姓氏替换这个姓氏。所以我需要以某种方式打开文件,找到我需要的地方(我确定它以Surname: '
开头并以',
结束,我需要在这两个子串之间替换字符串,无论它是什么之前,没有破坏文件结构(丢失换行符等等;实际文件很长,所以手动添加\ n不是一个选项)。
到目前为止,我已尝试过这个
$content = file_get_contents('text.txt');
$search = "/[^Surname: '](.*)[^',]/";
$replace = 'Smith';
$content = preg_replace($search,$replace,$content);
file_put_contents('text.txt', $content);
但它几乎取代了史密斯',因为',
的组合在这个文件中非常常见,而且它将整个文件转换为一行。
那么我该怎么做才能解决我的问题呢?非常感谢任何可能的帮助!
UPD:str_replace可能是我需要的,但首先我需要从文件中检索整行Surname: 'Doe',
以获得当前的姓氏。
答案 0 :(得分:4)
我会根据您的说明使用正则表达式/^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
答案 1 :(得分:0)
这个正则表达式应该有所帮助:
"/Surname: '(.*)'/"
答案 2 :(得分:0)
void MainWindow::on_checkBox_clicked(bool checked) {
checkBox_wasClicked = true;
}
for (;;) {
if (checkBox_wasClicked) {
state = move_motor;
checkBox_wasClicked = false;
} else if (motor_reached_end) {
state = move_motor_reverse;
motor_reched_end = false;
} else if ( /*... more transitions ... */ ){
}
if ( state == motor_move ) {
i++;
}
/* .... more stuff ... */
}