2011-04-07 80 views
3

如何使用NSRegularExpression刪除HTML文件中的整個頭標記。有人能給我一個正則表達式嗎?正則表達式刪除HTML頭標記

由於提前, Ph99Ph

+0

@Don:http://meta.stackexchange.com/questions/73133/ – 2011-04-07 19:18:07

+0

@馬特球:採取 – 2011-04-07 20:08:54

回答

12

有沒有! HTML是第2種語言,因此不能用正則表達式(類型-3)解析。

如有疑問,請參閱this wiki article

許多人使用正則表達式來解析/編輯HTML。這在簡單的情況下工作得很好,但完全容易出錯。

這是說:你應該有這個表達式相當可靠的結果:

<head>.+?</head> 

這需要「」以匹配換行符。再次

<head>(?:.|\n|\r)+?</head> 

:如果沒有,然後用這個這是容易出錯的,不這樣做。

什麼你應該使用XML解析器NSXMLParser

+0

點這解釋了爲什麼我的人沒有工作。謝謝。 – Ph99Ph 2011-04-07 19:22:49

+2

公平地說,這是一個常見的誤解,尤其是通過使用正則表達式解析/驗證/編輯html的不合理的在線文章的浪費量。我只能全心全意地推薦閱讀我喜歡的答案中的wiki文章。理解語言的複雜性是一件大事。基本上無所不在的計算機科學/編程。值得一讀。 – Regexident 2011-04-07 19:30:08

+0

要匹配換行符,可以使用修飾符:/ 。* <\/head>/s – 2013-04-03 09:18:56

4

請參閱接受的答案RegEx match open tags except XHTML self-contained tags。或者自堆棧溢出開始每天發佈的任何版本的完全相同的問題。

簡而言之,您無法可靠地使用正則表達式解析HTML。由於HTML的複雜性,RegEx不夠先進。

0

使用這樣的事情:

result = System.Text.RegularExpressions.Regex.Replace(result, 
     @"<()*head([^>])*>", "<head>", 
     System.Text.RegularExpressions.RegexOptions.IgnoreCase); 
result = System.Text.RegularExpressions.Regex.Replace(result, 
     @"(<()*(/)()*head()*>)", "</head>", 
     System.Text.RegularExpressions.RegexOptions.IgnoreCase);     
result = System.Text.RegularExpressions.Regex.Replace(result, 
     "(<head>).*(</head>)", " ", 
     System.Text.RegularExpressions.RegexOptions.IgnoreCase);