C#,Regex用<;br/>;在bbcode代码块之外

本文关键字:bbcode 代码 gt br Regex lt | 更新日期: 2023-09-27 18:29:20

我一整天都在尝试用regex将新行"'n"替换为"<br />",但在像"**[code]**some code...**[/code]**"这样的代码块之外。

例如,如果我有以下

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

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

C#,Regex用<;br/>;在bbcode代码块之外

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

看看基于字符流编写解析器——看看HTML敏捷包中的源代码,看看这是如何实现的(基本上是一个从一个字符移动到另一个字符的状态机)。

或者,使用现有的.NET BBCode解析器之一,作为.NET?的BBCode或wiki标记库的答案?指向.

好吧,在尝试了很多次但都失败了之后,我想出了下面的代码,它成功了,它是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

我希望这能帮助其他人。