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]

Ответы на вопрос(1)

Ваш ответ на вопрос