我找到/制作了一个正则表达式解析bbtags很好但它有一个缺陷,它不会处理与包含标记相同的嵌套标记。
我制作的BBTag解析器依赖于这样的事实,即最外面的标签可以包含子标签,如果嵌套标签与包含标签不同,那么这些子标签可以正常工作
我使用的正则表达式是:@"\[color=((.|\n)*?)(?:\s*)\]((.|\n)*?)\[/color(?:\s*)\]"
测试应用程序(简单的控制台应用程序)
var regex = new Regex(@"\[color=((.|\n)*?)(?:\s*)\]((.|\n)*?)\[/color(?:\s*)\]");
var matches = regex.Matches("[color=red]This is red.[color=green] This be green.[/color] Still red here.[/color] This has no color [color=green] and this is green.[/color]").Cast<Match>().Where(x => x.Success).ToList();
if (matches.Count > 0)
for(int m = 0; m < matches.Count; m++)
for (int i = 0; i < matches[m].Groups.Count; i++)
Console.WriteLine("({0}) - {1} -> {2}", m, i, matches[m].Groups[i]);
else
Console.WriteLine("No matches.");
答案 0 :(得分:1)
只需使用BBCode库。 Codekicker.BBCode解析BBCode,将其转换为HTML或文本,并为您提供可转换的AST。
正则表达式不适用于分层解析。你将很难完成这项工作。臭虫很难找到。安全问题将会出现。
答案 1 :(得分:0)
如果你想用regex匹配这种东西(可以嵌套),你可以使用平衡组技术:
(?:[^][]|(?<Open>\[([a-z]+)[^]]*])|(?<Content-Open>\[/\1]))+(?(Open)(?!))
您可以找到有关此技术here的有趣信息。