asp.net mvc - c#正则表达式替换
或[br /]到" "[pre=html

本文关键字:br quot html pre mvc net 正则表达式 asp 替换 | 更新日期: 2023-09-27 18:02:13

我有这个代码取代BBCode到html,问题出现时,我想要替换标签<br />[br /]是在[pre=html] code [/pre]

Regex exp; string str;
 str = "more text [pre=html] code code code code [br /] code code code [br /] code code [/pre] more text";
 str = str.Replace("[br /]","<br />");
 exp = new Regex(@"'[b'](.+?)'[/b']");
 exp.Replace str = (str,"<strong>$1</strong>");
 ......
 exp = new Regex (@ "'[pre'=([a-z']]+)'](['d'D'n^]+?)'[/pre']");
 str = exp.Replace(str, "<pre class='"$1'">" + "$2" + "</pre>");

正如您将<br />[br /]更改为[pre=html] code [/pre]<pre class=html> code </pre>内的"'n"

asp.net mvc - c#正则表达式替换<br />或[br /]到"
"[pre=html

一般情况下,几乎不可能表达这样的约束,即某项必须匹配,当它位于单个正则表达式中的另一项的匹配对之间时。

将其拆分为多个操作更容易,首先找到[pre]块,然后分别处理其内容。它使你的代码更容易编写、理解和调试。

下面是如何完成这一点的一个例子:

static string ReplaceBreaks(string value)
{
    return Regex.Replace(value, @"(<br */>)|('[br */'])", "'n");
}
static string ProcessCodeBlocks(string value)
{
    StringBuilder result = new StringBuilder();
    Match m = Regex.Match(value, @"'[pre=(?<lang>[a-z]+)'](?<code>.*?)'[/pre']");
    int index = 0;
    while( m.Success )
    {
        if( m.Index > index )
            result.Append(value, index, m.Index - index);
        result.AppendFormat("<pre class='"{0}'">", m.Groups["lang"].Value);
        result.Append(ReplaceBreaks(m.Groups["code"].Value));
        result.Append("</pre>");
        index = m.Index + m.Length;
        m = m.NextMatch();
    }
    if( index < value.Length )
        result.Append(value, index, value.Length - index);
    return result.ToString();
}

您必须根据需要修改它以执行进一步的处理,但我认为这将使您开始。