2012-09-25 130 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 
相關問題