некоторые HTML-теги, вы можете просто сделать простой string.Replace
. BBCode во многом представляет собой отображение 1: 1, tag-for-tag, например <b>
и </b>
, сопоставление с [B]
и [/B]
соответственно. Так что это легко сделать с помощью всего:
html.Replace("<b>", "[b]").Replace("</b>", "[/b]")
Если это действительно мертв, простой HTML, и вы не возражаете влияние на производительность и код уродство делает этот тег-по-теге, пойти на это. Но будьте осторожны с уязвимостями межсайтового скриптинга, если вы планируете отображать полученный BBCode на веб-странице где-нибудь; это нигде не достаточно хорошо для санитарии.
Но даже не пытайтесь использовать регулярные выражения для дезинфекции HTML и автоматической замены всех тегов. Например, тег <img>
выглядит по-разному в HTML и BBCode. В HTML это <img src="..."/>
(трейлинг-коса необязателен), а в BBCode - [IMG]...[/IMG]
. Выполнение этого с помощью регулярного выражения ... ну, скажем, субоптимальное.
Регулярные выражения предназначены для обычных языков, а HTML не является обычным языком, это свободный от контекста язык. Рассмотрите возможность использования фактического анализатора HTML, а не HTML Agility Pack. Затем вы можете спуститься по дереву DOM, перечислить элементы, которые хотите, и нанести их на BBCode или что-нибудь еще, как вам нравится.
[Вы не можете разобрать HTML с использованием регулярных выражений!] (Http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self- содержащиеся теги) – SLaks
Я прочитал этот пост, я знаю. Но. У меня есть пользовательский ввод. и пользователь будет вводить в программу html в нормальном формате. Я делаю пользовательский формат ввода. я надеюсь, что вы меня понимаете .. =) – Dmitriy
Вы все еще можете работать с пользовательскими вводами, используя библиотеки манипуляций DOM. И в любом случае невозможно без потерь конвертировать из HTML в BBCode, так как последнее не поддерживает все, что делает первое. –