0

正規表現は繰り返し発生する問題のようですが、問題の解決策がわかりませんでした。

私は多くの行(> 75 000)のファイルを持っており、その多くを2つの識別可能なパターン(starting_pointとending_point)の間で置き換えたいと思っています。私の正規表現の試み:

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

。\nを含む任意の文字になりました。行にほとんど何も含まれていないため、%..%を区切り文字として使用しましたが、%(/、$、-、 "、spaces、+、{、}を含むもの)がなく、「コンパイルに失敗しました:繰り返すものがありませんオフセットで...」。

しかし、私はそれを機能させることができないようです。php.iniのpcreが問題だと思いましたが、そうではないようです。?Uを使おうとしましたが、うまくいきませんでした。と同じ 。*?私がいくつかの場所で読んだように。たぶん私はそれらを間違って書いただけですが..

とにかく、これで頭をかいて喜んでいる人はいますか?

テキストの例(...は他の多くの行を意味します):

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

2 に答える 2

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

これを試して。

于 2012-05-11T15:40:00.473 に答える
0

これはうまくいくようです:%(#\sstarting_point)(.*?)(#\sending_point)%isU

$ matches [2] [0]には、#starting_pointと#ending_pointの間の行が含まれています

于 2012-05-11T15:26:59.720 に答える