Regex BBCode в HTML
Я написал конвертер BBcode в HTML.
Конвертер должен пропускать незакрытые теги.
Я думал о 2 вариантах сделать это:
1) сопоставить все теги за один раз с помощью одного вызова регулярного выражения, например:
Regex re2 = new Regex(@"\[(\ /?(?:b|i|u|quote|strike))\]");
MatchCollection mc = re2.Matches(sourcestring);
а затем зациклите MatchCollection, используя 2 указателя, чтобы найти начальные и открытые теги, а затем замените правый HTML-тег.
2) вызвать regex несколько раз для каждого тега и заменить напрямую:
Regex re = new Regex(@"\[b\](.*?)\[\/b\]");
string s1 = re.Replace(sourcestring2,"<b>$1</b>");
Что эффективнее?
Первый вариант использует одно регулярное выражение, но потребует от меня перебрать все теги и найти все пары, а также пропустить теги, у которых нет пары.
Еще одним положительным моментом является то, что мне нет дела до содержимого между тегами, я просто работаю и заменяю их, используя позицию.
Во втором варианте мне не нужно беспокоиться о зацикливании и создании специальной функции замены.
Но потребуется выполнить несколько регулярных выражений и замен.
Что ты можешь предложить?
Если второй вариант является правильным, существует проблема с регулярным выражением\[b\](.*?)\[\/b\
]
Как я могу исправить это, чтобы также соответствовать многострочным, как:
[b]
test 1
[/b]
[b]
test 2
[/b]