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