Preg_替换为多行(php)

Preg_替换为多行(php),php,regex,preg-replace,Php,Regex,Preg Replace,可能重复: 我试图从文件中读取一些文本,然后替换一些模式。如果我试图从一个字符串替换paten,它就可以工作,但是如果一个文件中有多个这样的字符串,它就不能工作 $this->session->set_flashdata('error_message','Naslovna vrstica je bila uspešno shranjena') 这是一个文本示例,我试图用这一行来替换replacment,但如果文件中有其他这样的行,它们都是单独匹配的,则不会 $content = file_ge

可能重复:

我试图从文件中读取一些文本,然后替换一些模式。如果我试图从一个字符串替换paten,它就可以工作,但是如果一个文件中有多个这样的字符串,它就不能工作

$this->session->set_flashdata('error_message','Naslovna vrstica je bila uspešno shranjena')

这是一个文本示例,我试图用这一行来替换replacment,但如果文件中有其他这样的行,它们都是单独匹配的,则不会

$content = file_get_contents("C:\Users\Borut\\test.txt");
$pattern="/^.*session->set_flashdata\((.*),(.*)\);$/";
$replacement="\$_SESSION[$1]=$2";

这是我的密码。如何将多个字符串替换为上面显示的字符串。

所需的修饰符是
m
。可以找到所有修改器 也就是说,最简单、更好的正则表达式解决方案是

"/\$this->session->set_flashdata\((.*?),\s*(.*?)\);/"

注意到了吗?在每个中的.*之后。这是为了停止贪婪的匹配,就像你的一样。另外请注意,从我看到的删除
^
$

后,也不需要修改器,看起来您的模式有一个
开始点
结束点
,如果您给出一个测试行,这两个点都可以正常工作,但是如果您想替换多个引用,您需要修改它,以便它仍然可以找到没有定义起点或终点的模式。i、 您希望模式更像
/session->set\u flashdata\(.*),(.*)我不需要s,因为这意味着新行是排除的,它与排除^和$一起工作。我不明白你的意思?虽然,*不考虑零元素,但它将尽可能匹配。看看这是如何在页面的一半处工作的。而且,
/m
是我的意思。我已经更新了上面的答案