@Chevex Это становится ОЧЕНЬ сложно реализовать с помощью Regex. Лучшее, что вы можете сделать, это написать парсер "от руки". Это не очень сложно (особенно если вы делаете это рекурсивным, а не основанным на стеке).

даю форум и хочу использовать теги в стиле форума, чтобы позволить пользователям ограниченно форматировать свои сообщения. В настоящее время я использую Regex для этого. По этому вопросу: <, a href = "https://stackoverflow.com/questions/4909283/how-to-use-c-regular-expressions-to-emulate-forum-tags"> Как использовать регулярные выражения C # эмулировать теги форума

Проблема в том, что регулярное выражение не различает вложенные теги. Вот пример того, как я реализовал этот метод:

    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;
        }
    }

Теперь, если я отправлю что-то вроде[quote] This user posted [quote] blah [/quote] [/quote] он не правильно определяет вложенную цитату. Вместо этого он берет первый открывающий тег цитаты и помещает его вместе с первым закрывающим тегом цитаты.

Ребята, вы рекомендуете какие-либо решения? Можно ли изменить регулярное выражение для захвата вложенных тегов? Может быть, я не должен использовать регулярные выражения для этого? Любая помощь приветствуется.

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

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