38

正規表現を使用して、文字列の一致する部分のみを消去しようとしています。この関数を使用してpreg_replaceいて、一致する部分を括弧で囲んで、一致するテキストを削除しようとしました。例:

preg_replace('/text1(text2)text3/is','',$html);

ただし、これにより文字列全体が''に置き換えられます。text2だけを消去したいのですが、text1とtext3はそのままにしておきます。文字列の一致する部分だけを一致させて置き換えるにはどうすればよいですか?

4

4 に答える 4

51

覚えておきたい式の部分だけを保持するには、後方参照(つまり角かっこ)を使用します。$1$2などを使用して、置換文字列の内容を呼び出すことができます。

preg_replace('/(text1)text2(text3)/is','$1$2',$html);
于 2011-02-04T13:01:26.337 に答える
45

text1一致パターンでandを使用text3してから、置換文字列を介してそれらを元に戻す別の方法があります。次のようなアサーションを使用できます。

preg_replace('/(?<=text1)(text2)(?=text3)/', "", $txt);

このように、正規表現は存在だけを探しますが、置換を適用するときに 2 つの文字列を考慮しません。

詳細については、 http://www.regular-expressions.info/lookaround.htmlを参照してください。

于 2011-02-04T13:05:29.610 に答える
17

これを試して:

$text = preg_replace("'(text1)text2(text3)'is", "$1$2", $text);

それがうまくいくことを願っています!

編集:推奨される方法に変更さ\\1\\2れました。$1$2

于 2011-02-04T13:00:52.123 に答える
-5

最も簡単な方法は、いくつかのタイプに言及されています。もう 1 つのアイデアは先読み/先読みです。今回はやり過ぎですが、非常に便利な場合がよくあります。

于 2011-02-04T13:05:02.450 に答える