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 />"
?
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
我希望这能帮助其他人。