2011-04-07 71 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);