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
是我的意思。我已经更新了上面的答案