0

私は回そうとしています:

[quote]Hello![/quote]

の中へ:

<div class="quoted-text">Hello!</div>

このコードは、私が作業に最も近いものです:

var r = new Regex(@"\[quote\]([^\]]+)\[\/quote\]", RegexOptions.Multiline | RegexOptions.IgnoreCase);
rawComment = r.Replace(rawComment, "<div class=\"quoted-text\">$1</div>");

ただし、ネストされた引用符の場合は正しく機能しません。最も内側の引用符のみを変換するようです。テストケースは次のとおりです。

[quote]
    test
    [quote]
        nest
        [quote]
            nest
        [/quote]
    [/quote]
[/quote]

次のようになります。

[quote]
    test
    [quote]
        nest
        <div class="quoted-text">
            nest
        </div>
    [/quote]
[/quote]

これを期待どおりに機能させる方法を誰かに教えてもらえますか?

4

1 に答える 1

1

引用符をブロックとして解析する必要がある理由がわかりません。したがって、最も簡単な解決策は、各トークンを必要なものに置き換えることです。LinqPad の例を次に示します。

void Main()
{

    var rawComment =
"[quote]\n" +
"   test\n" +
"   [quote]\n" +
"       nest\n" +
"       [quote]\n" +
"           nest\n" +
"       [/quote]\n" +
"   [/quote]\n" +
"[/quote]\n";

    var start = new Regex(@"\[quote\]", RegexOptions.IgnoreCase);
    var end = new Regex(@"\[\/quote\]", RegexOptions.IgnoreCase);
    rawComment = start.Replace(rawComment, "<div class=\"quoted-text\">");
    rawComment = end.Replace(rawComment, "</div>");

    rawComment.Dump();
}

これにより、以下が生成されます。

<div class="quoted-text">
  test
  <div class="quoted-text">
    nest
    <div class="quoted-text">
      nest
    </div>
  </div>
</div>
于 2012-09-13T15:07:33.120 に答える