我一整天都在努力让正则表达式用"\n"
替换新行"<br />"
但在代码块之外替换为"**[code]**some code...**[/code]**"
。
例如,如果我有以下
string myString = "Good luck **\n** thanks [code]my **\n** name[/code]";
如何使用正则表达式将换行符"\n"
替换为代码标记之外的"<br />"
?
答案 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
我希望这有助于其他人。