用Laravel或PHP

时间:2016-08-03 10:16:20

标签: php string file laravel replace

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

  

姓名:' 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',以获得当前的姓氏。

3 个答案:

答案 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 ... */
}