C#,Regex在bbcode代码块之外替换所有换行符

时间:2012-03-29 15:33:42

标签: c# regex replace line-breaks

我一整天都在努力让正则表达式用"\n"替换新行"<br />"但在代码块之外替换为"**[code]**some code...**[/code]**"

例如,如果我有以下

string myString = "Good luck **\n** thanks [code]my **\n** name[/code]";

如何使用正则表达式将换行符"\n"替换为代码标记之外的"<br />"

2 个答案:

答案 0 :(得分:2)

BBCode不是常规语言,因此使用正则表达式解析它不是最好的方法。

看看基于字符流编写解析器 - 看一下HTML Agility Pack的源代码,看看它是如何完成的(基本上是状态机从一个字符移动到另一个字符)。

或者,使用现有的.NET BBCode解析器之一,因为BBCode or wiki markup libraries for .NET?的答案指向。

答案 1 :(得分:0)

好吧,经过多次尝试和失败之后,我想出了以下代码,它运行起来,这是vb.net BTW。

Public Function BBCode(ByVal strTextToReplace As String) As String
        Dim regExp As Regex
        strTextToReplace = strTextToReplace.Replace(Chr(10), "<br />")

        regExp = New Regex("\[code\]([^\]]+)\[\/code\]", RegexOptions.Singleline)
        Dim mc As MatchCollection = regExp.Matches(strTextToReplace)
        For Each m As Match In mc
            Dim gs = m.Groups()
            strTextToReplace = regExp.Replace(strTextToReplace, "<table cellpadding=""2"" cellspacing=""0"" class=""tbl_Quote""><tr><td dir=""rtl""><a class=""quote_Head"">code:</a></td></tr><tr><td><textarea class=""lined"" cols=""77"" readonly=""readonly"" rows=""1"" spellcheck=""false"">" & gs(1).Value.ToString.Replace("<br />", Chr(10)) & "</textarea></td></tr></table>", 1)
        Next
Return strTextToReplace
End Function

我希望这有助于其他人。

相关问题