1

あなたが助けてくれることを願っています。正規表現はかなり新しく、この正規表現を作成しましたが、一致しないようです。エラーメッセージが表示されないので、構文は正しいと思いますが、適用されていませんか?

正規表現で次のようなコンテンツを置き換えたい

{foo}bar{/foo}バー 付き

これが私のコードです:

$regex = "#([{].*?[}])(.*?)([{]/.*?[}])#e";
$return = preg_replace($regex,"('$2')",$return);

誰かが助けてくれることを願っています。なぜ機能しないように見えるのかわかりません。

読んでくれてありがとう。

4

2 に答える 2

3

正規表現は機能しますが、終了タグが開始タグと同じである必要があることを知るのは賢明ではありません。代わりにこれを使用します。また、少し簡略化しました。

$regex = '#{([^}]*)}(.*?)\{/\\1}#';

echo preg_replace('{foo}bar{/foo}', '$2', $str); // outputs "bar"

コードパッド

于 2012-06-03T00:04:33.660 に答える
2

上記の私のコメントを参照してください:

#(?:[{](.*?)[}])(.*?)(?:[{]/\1[}])#

タグを等しく保つために後方参照を使用します。また、キャプチャ以外の括弧を使用して、役に立たないグループを除外しました。$1これがタグ名に$2なり、タグの内容になります。

タグがネストできる場合は、置換を数回適用する必要があることに注意してください。

于 2012-06-03T00:01:15.637 に答える