Tags do fórum. Qual é a melhor maneira de implementá-los?

Estou criando um fórum e quero usar tags no estilo de fórum para permitir que os usuários formatem suas postagens de forma limitada. Atualmente, estou usando o Regex para fazer isso. Conforme esta pergunta: <, a href = "https://stackoverflow.com/questions/4909283/how-to-use-c-regular-expressions-to-emulate-forum-tags"> Como usar expressões regulares em C # emular tags do fórum

O problema é que o regex não distingue entre tags aninhadas. Aqui está um exemplo de como eu implementei esse método:

    public static string MyExtensionMethod(this string text)
    {
         return TransformTags(text);
    }

    private static string TransformTags(string input)
    {
        string regex = @"\[([^=]+)[=\x22']*(\S*?)['\x22]*\](.+?)\[/(\1)\]";
        MatchCollection matches = new Regex(regex).Matches(input);
        for (int i = 0; i < matches.Count; i++)
        {
            var tag = matches[i].Groups[1].Value;
            var optionalValue = matches[i].Groups[2].Value;
            var content = matches[i].Groups[3].Value;

            if (Regex.IsMatch(content, regex))
            {
                content = TransformTags(content);
            }

            content = HandleTags(content, optionalValue, tag);

            input = input.Replace(matches[i].Groups[0].Value, content);
        }

        return input;
    }

    private static string HandleTags(string content, string optionalValue, string tag)
    {
        switch (tag.ToLower())
        {
            case "quote":
                return string.Format("<div class='quote'>{0}</div>", content);
            default:
                return string.Empty;
        }
    }

Agora, se eu enviar algo como[quote] This user posted [quote] blah [/quote] [/quote] ele não detecta corretamente a cotação aninhada. Em vez disso, pega a primeira marca de cotação de abertura e a coloca com a primeira marca de cotação de fechamento.

Vocês recomendam alguma solução? A regex pode ser modificada para pegar tags aninhadas? Talvez eu não deva usar regex para isso? Qualquer ajuda é apreciada.

questionAnswers(2)

yourAnswerToTheQuestion