使用正则找出XML(HTML)里不匹配的标签

找到HTML里错误的Tag,主要是为了方便在程序里将HTML以XML方式读取分析.
通过正则表达式来找到标签,然后通过堆栈方式处理,使用C#编写.

string html = @"此处省略";
Regex regExp = new Regex(@"<(/?(\w+))[^>]*>", RegexOptions.Compiled);
Match m = regExp.Match(html);
Stack<Match> tags = new Stack<Match>();
List<Match> err = new List<Match>();
while (m.Success)
{
    if (!m.Value.StartsWith("</"))
    {
        tags.Push(m);
    }
    else
    {
        if (string.Compare(tags.Peek().Groups[2].Value, m.Groups[2].Value, true) == 0) tags.Pop();//移除
        else err.Add(m);
    }
    m = m.NextMatch();
}
foreach (Match e in tags)//前面<...多余的 
{
    Console.WriteLine(e.Value + "位置:" + e.Index + "长度:" + e.Length);
}
foreach (Match e in err)//后面</...多余的
{
    Console.WriteLine(e.Value + "位置:" + e.Index + "长度:" + e.Length);
}

标签:C#, 正则

已有 2 条评论

  1. 沙发咯 这个程序写的好棒,好精悍 Regex regExp = new Regex(@"]*>", RegexOptions.Compiled); 这句用法没有见过!

  2. 谢谢分享

添加新评论