【问题标题】:Deleting many lines using preg_replace in php在php中使用preg_replace删除多行
【发布时间】:2012-05-11 13:45:44
【问题描述】:

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

我有一个包含多行 (> 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
...

【问题讨论】:

  • 您到底想替换什么?起始点和结束点之间的每一行?
  • 是的,完全正确,保留之前或之后的内容。

标签: php regex pcre


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:
    $filtered = preg_replace('/(#\sstarting_point)(.*?)(#\sending_point)/sm', $replacement,$2befiltered);
    

    试试这个。

    【讨论】:

    • 这个不行 :( 但是我有解决办法,谢谢你的帮助!
    猜你喜欢
    • 1970-01-01
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多