0

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

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

$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
...
4

2 回答 2

0

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

$matches [2] [0] 包含 #starting_point 和 #ending_point 之间的行

于 2012-05-11T15:26:59.720 回答
0
$filtered = preg_replace('/(#\sstarting_point)(.*?)(#\sending_point)/sm', $replacement,$2befiltered);

尝试这个。

于 2012-05-11T15:40:00.473 回答