0

我有一个表单,用户可以在其中输入一些简单的 html 标签,我想解析他们的文本以确保以下内容:

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

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

所以这些会通过:

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

这将失败:

<hello> ><

所以它不是严格的 html,正如您从第一个示例中看到的那样,它基本上只是确保存在相同数量的开括号和右括号,并且它们以正确的顺序出现,即您不能以右括号开头然后有一个结束括号。

4

3 回答 3

0

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

如果要检查大括号是否正确,算法略有不同。当遇到右括号时,弹出堆栈的顶部,它必须是一个左括号。

于 2012-09-25T16:38:13.407 回答
0

这是一个不同的问题,但与在Scala 中使用的功能非常相似,可以对一堆 if 进行编程请参阅该问题中的最佳答案,但是,您将传递的“状态”不会是“我们有多少个开放的”,但“内部还是外部”的布尔值?

于 2012-09-25T15:54:50.380 回答
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
于 2012-09-25T18:56:43.643 回答