使用php、grep和regex搜索和替换文件中的代码行

使用php、grep和regex搜索和替换文件中的代码行,php,regex,grep,Php,Regex,Grep,我有一个php文件,可以完美地读取其他文件的内容,并将其作为字符串返回 $contents = $file->read(); // return as string. 我需要能够搜索和替换某些行 以$this->Session->setFlash开头并以,true)结尾的行必须替换为 以开头的行 $this->Session->setFlash并以结束,true),“default”,数组('class'=>“flash\u failure”) 如果有帮助的话,我的机器里有grep 最后

我有一个php文件,可以完美地读取其他文件的内容,并将其作为字符串返回

$contents = $file->read(); // return as string.
我需要能够搜索和替换某些行

$this->Session->setFlash
开头并以
,true)结尾的行必须替换为

以开头的行
$this->Session->setFlash
并以
结束,true),“default”,数组('class'=>“flash\u failure”)

如果有帮助的话,我的机器里有grep

最后,在内容更改后,我有一个函数将内容写回

$file->write($contents);
我知道这有助于找到线路,但我不知道如何更换

^.*Session->setFlash.*, true\)\);$
您可以尝试:

$contents = $file->read(); // return as string.

// change contents.
$contents = preg_replace('/^(\$this->Session->setFlash.*?), true\)\);$/',"$1, true), 'default', array('class'=>'flash_failure'));",$contents);

$file->write($contents);
您可以尝试:

$contents = $file->read(); // return as string.

// change contents.
$contents = preg_replace('/^(\$this->Session->setFlash.*?), true\)\);$/',"$1, true), 'default', array('class'=>'flash_failure'));",$contents);

$file->write($contents);
因此,解决办法是:

$contents = preg_replace('/^(.*Session->setFlash.*, true\))\);$/m',
                                         "$1, 'default', array('class'=>'flash_failure'));", $contents);
多行修改器是关键。

因此解决方案是:

$contents = preg_replace('/^(.*Session->setFlash.*, true\))\);$/m',
                                         "$1, 'default', array('class'=>'flash_failure'));", $contents);

多行修饰符是关键。

您的代码正在工作,但当我执行$contents=file\u get\u contents($filename)时,它对$contents不起作用;您的代码可以工作,因为我在这里测试了
不工作的确切含义是什么?使用
file\u get\u contents
获取
$contents
后,请尝试打印
$contents
的值。文件中有多行。所以我怀疑我需要设置a/m修饰符。但是我不能让它工作。有关更多详细信息,请参见此。您的代码正在工作,但当我执行$contents=file\u get\u contents($filename)时,它在$contents上不起作用;您的代码可以工作,因为我在这里测试了
不工作的确切含义是什么?使用
file\u get\u contents
获取
$contents
后,请尝试打印
$contents
的值。文件中有多行。所以我怀疑我需要设置a/m修饰符。但是我不能让它工作。有关更多详细信息,请参见此。