Regex格式化嵌套的BB[引用]标记



我正试图转向:

[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]

有人能告诉我如何按预期工作吗?

我看不出为什么需要将引号解析为块。因此,最简单的解决方案是用您想要的令牌替换每个令牌。下面是LinqPad的一个例子:

void Main()
{
    var rawComment =
"[quote]n" +
"   testn" +
"   [quote]n" +
"       nestn" +
"       [quote]n" +
"           nestn" +
"       [/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>

最新更新