0

いくつかのネストされたタグに一致するように正規表現を取得しようとしています。(はい、パーサーを使用する必要があることはわかっていますが、入力は正しくなります)。

例:

Text.
More text.
[quote]
First quote
[quote]
Nested second quote.
[/quote]
[/quote]

正規表現でタグを次のように変更したいとします<blockquote>

Text.
More text.
<blockquote>
First quote
<blockquote>
Nested second quote.
</blockquote>
</blockquote>

開始タグと終了タグの両方を同時に一致させて、これを行うにはどうすればよいですか?

4

4 に答える 4

3

正確さを気にしない場合は、単純な文字列置換を使用して、各タグを個別に置換できます。PHPstr_replaceを使用して開始タグと終了タグを置き換える例を次に示します。

$str = str_replace('[quote]', '<blockquote>', $str);
$str = str_replace('[/quote]', '</blockquote>', $str);

または正規表現の助けを借りて(再びPHP):

$str = preg_replace('~\[(/?)quote]~', '<$1blockquote>', $str);

ここで、の一致は、パターンの最初のグループの一致(、、または空)に\[(/?)quote]置き換えられます。<$1blockquote>$1(/?)/

ただし、実際には、開始タグと終了タグを追跡するパーサーを使用する必要があります。それ以外の場合は、対応するタグがない、または(さらにタグを使用している場合は)適切にネストされていない開始タグまたは終了タグを使用できます。

于 2010-03-03T18:33:39.800 に答える
2

(任意に) ネストされたものを正規表現と一致させることはできません。

[quote]ただし、 with<blockquote>および[/quote]のすべてのインスタンスを で置き換えることができます</blockquote>

于 2010-03-03T18:34:22.073 に答える
1

それはお粗末な考えですが、どうやら次のようなものを一致させようとしているようです:\[\(/?\)quote\]そしてそれを次のように置き換えます:<\1blockquote>

于 2010-03-03T18:35:55.660 に答える
1

2 つの式を使用できます。

s/\[quote\]/\<blockquote\>/
s/\[\/quote\]/\<\/blockquote\>/
于 2010-03-03T18:38:07.873 に答える