C #, Regex заменить все перевод строкивне блока кода bbcode - PullRequest
0 голосов
/ 29 марта 2012

Я пытался весь день без удачи регулярное выражение заменить новую строку "\n" на "<br />", но вне блока кода, как "**[code]**some code...**[/code]**".

Например, если у меня есть следующее

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

Как заменить разрывы строк "\n" на "<br />" только вне тега code, используя регулярное выражение?

Ответы [ 2 ]

2 голосов
/ 29 марта 2012

BBCode не является обычным языком, поэтому использование регулярных выражений для анализа не лучший подход.

Посмотрите на написание синтаксического анализатора на основе символьного потока - посмотрите на исходный код из HTML Agility Pack , чтобы увидеть, как это делается (в основном конечный автомат, переходящий от символа к символу).

В качестве альтернативы, используйте один из существующих синтаксических анализаторов .NET BBCode, поскольку ответы на BBCode или библиотеки вики-разметки для .NET? указывают на.

0 голосов
/ 30 марта 2012

Что ж, после стольких попыток и неудач я придумал следующий код, и он работал, это 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

Надеюсь, это поможет кому-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...