0

preg_match_all() またはより良い関数を使用してタグ間のすべてのテキストを取得するためのフォローアップの質問?

次の POST データがあるとします。

2010-June-3
<remove>2010-June-3</remove>
2010-June-15
2010-June-16
2010-June-17
2010-June-3
2010-June-1

2010-June-3 の最初のインスタンスのみを削除したいのですが、次のコードはすべてのデータを削除します。

$i = 1;
$pattern = "/<remove>(.*?)<\/remove>/";
preg_match_all($pattern, $_POST['exclude'], $matches, PREG_SET_ORDER);
    if (!empty($matches)) { 
        foreach ($matches as $match) {
            // replace first instance of excluded data
            $_POST['exclude'] = str_replace($match[1], "", $_POST['exclude'], $i);  
        }
   }

echo "<br /><br />".$_POST['exclude'];

これは反響します:

<remove></remove>
2010-June-15
2010-June-16
2010-June-17
2010-June-1

エコーする必要があります:

<remove>2010-June-3</remove>
2010-June-15
2010-June-16
2010-June-17
2010-June-3
2010-June-1
4

1 に答える 1

3

代わりにpreg_replace()を使用する必要があります。

$_POST['exclude'] = preg_replace( '/' . preg_quote( $match[1], '/' ) . '/', "", $_POST['exclude'], 1, $i );

limit上記のリンクでわかるように、$_POST['exclude'] の後の変数は変数です。

preg_quote ()関数は日付フィールドには必要ありませんでしたが、変数であるため、特殊な正規表現文字を含める必要がある場合があります。

于 2010-06-17T18:09:30.723 に答える