@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]
он не правильно определяет вложенную цитату. Вместо этого он берет первый открывающий тег цитаты и помещает его вместе с первым закрывающим тегом цитаты.
Ребята, вы рекомендуете какие-либо решения? Можно ли изменить регулярное выражение для захвата вложенных тегов? Может быть, я не должен использовать регулярные выражения для этого? Любая помощь приветствуется.