在php中使用preg_replace删除多行

时间:2012-05-11 13:45:45

标签: php regex pcre

虽然正则表达似乎是一个经常出现的麻烦,但我没有找到解决问题的方法。

我有一个多行(> 75 000)的文件,其中我想要替换它们中的很多,都在两个可识别的模式(starting_point和ending_point)之间。 我的正则表达式尝试:

$filtered = preg_replace('%(#\sstarting_point).+(#\sending_point)%isU',$replacement,$2befiltered);

。现在是什么角色,包括\ n。我使用%..%作为分隔符,因为我的行几乎有任何东西,但没有%(任何东西包括/,$, - ,“,空格,+,{,}),我遇到了”编译失败:没有重复偏移......“。

但我似乎无法使其发挥作用。我想也许php.ini中的pcre是问题所在,但似乎并非如此。我试图使用?U,但没有成功。与。*相同正如我在某些地方读过的那样。也许我只是写错了,但是......

无论如何,是否有人愿意为此嗤之以鼻?

文本示例(带...表示许多其他行):

whatever
lines
you
can
...
# starting_point
lines/*-
to$_,"
delete+{}=@
...
# ending_point
some
other
lines
...

2 个答案:

答案 0 :(得分:0)

这似乎有效:%(#\sstarting_point)(.*?)(#\sending_point)%isU

$ matches [2] [0]包含#starting_point和#ending_point

之间的行

答案 1 :(得分:0)

$filtered = preg_replace('/(#\sstarting_point)(.*?)(#\sending_point)/sm', $replacement,$2befiltered);

试试这个。