尝试使用c#创建HTML检查器,但我无法弄清楚如何检查两个HTML标记是否正确配对<body></body>
。我设法将所有相关标签放入字典(前面带有/
的结束标签)中,按照它们出现在输入中的顺序。我也可以检查不要关闭的开放标签(反之亦然)。
但我无法弄清楚如何检查任何标签对是否重叠。例如。
<body><title></body></title>
|____________|
|______________|
(会有很多对)
要澄清,这个问题是关于配对匹配,而不是关于其他所有的HTML,谢谢!
答案 0 :(得分:1)
如果您想匹配标签对(旁边没有配对标签),请考虑以下事项:
为了简单起见,让我用括号代替标签来说明这个想法。该函数检查括号()[]{}
是否正确平衡。
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;
}
答案 1 :(得分:0)
您可能必须使用与stack
类似的内容来实现您正在寻找的内容。堆栈是否包含开口标记,并且只能移除顶部标记(因此,如果添加了任何其他开放标记但未关闭,则无法删除隐藏在其下方的标记)。
可以轻松检查某些内容是否已关闭或是否有资格关闭。如果其匹配标记不在堆栈顶部,则在您关闭其上方的标记之前,它无法关闭。