2012-09-25 78 views
0

我有,用户输入一些简单的HTML标签的形式,我想分析其文本,以确保满足以下条件:功能,确保HTML开始和结束标记是正确的

所有开始标记的有一个匹配的结束标记

这是对最终用户的简化标记,不是太严格。

因此,这些会通过:

<text>hello world<text> 
<text>hello world</text> 
<123> 

,这将失败:

<hello> >< 

所以它不是严格的HTML,你可以从第一个例子中看到的,它基本上只是保证有相同数量的开放和紧密的括号,并且它们以正确的顺序出现,即不能以紧密括号开始,然后使用末尾括号。

回答

0

这是一个不同的问题,但与Scala way to program bunch of if's中正在使用的函数非常类似,但请参阅该问题的最佳答案,但是,您将要传递的“状态”不会是“多少开放的我们有“但内部或外部的布尔”?

0

您需要一个堆栈数据结构。基本上你可以阅读输入内容,每次遇到开始标记时,你都会推入堆栈。当你遇到结束标记时,你从堆栈中弹出最后一项并进行比较。他们应该永远是平等的。最后堆栈应该是空的。

如果要检查大括号是否正确,算法会稍有不同。遇到右括号时,弹出堆栈顶部,并且它必须是左括号。

0

如果只是带有单个开始和结束标记的行,可以使用正则表达式。

"<head>abc</head>" matches """<([^<>]+)>[^<>]*</\1>""" // true 
"<head>abc</head>>" matches """<([^<>]+)>[^<>]*</\1>""" // false 
"<head>abc</hed>" matches """<([^<>]+)>[^<>]*</\1>""" // false 
"<head>abc<head>" matches """<([^<>]+)>[^<>]*</\1>""" // false 
相关问题