使用c#对html标签进行配对
本文关键字:html 使用 标签 | 更新日期: 2023-09-27 18:03:30
尝试使用c#创建一个HTML检查器,但我只是不知道如何检查两个HTML标签是否正确配对<body></body>
。我设法把所有相关的标签放入字典(与/
在前面的结束标签),按照它们出现在输入中的顺序。我还可以检查不关闭的开始标记(反之亦然)。
但是我不知道如何检查是否有任何对标签重叠。例如
<body><title></body></title>
|____________|
|______________|
(会有很多很多对)
澄清一下,这个问题是关于对匹配,而不是关于其他所有html,谢谢!如果要匹配成对的标记(非成对的标记除外),请考虑以下事项:
- 从左到右,枚举所有标签;
- 如果你看到开始标签,把它放到堆栈中;
- 如果你看到一个结束标签,检查相应的开始标签是否在堆栈的顶部;
- 最后,检查堆栈是否为空。
为了简单起见,让我用括号代替标签来说明这个想法。函数检查括号()[]{}
是否正确平衡。
static bool CheckString(string s)
{
var stack = new Stack<char>();
foreach(char c in s)
if("([{".Contains(c))
stack.Push(c);
else if(")]}".Contains(c))
{
if(stack.Count == 0)
return false;
char d = stack.Pop();
if(d == '(' && c != ')' || d == '[' && c != ']' || d == '{' && c != '}')
return false;
}
return stack.Count == 0;
}
您可能必须使用类似于stack
的东西来实现您正在寻找的内容。让堆栈包含开始标签,并且只有顶部标签可以被删除(因此,如果添加了任何其他开始标签但未关闭,则不能删除埋在下面的标签)。
使检查某些东西是否已经关闭或是否有资格关闭变得容易。如果它匹配的标记不在堆栈的顶部,则在关闭其上面的标记之前不能关闭它。