正则表达式删除 HTML-head-tag

Posted

技术标签:

【中文标题】正则表达式删除 HTML-head-tag【英文标题】:Regex to remove HTML-head-tag 【发布时间】:2011-04-07 19:09:45 【问题描述】:

如何使用 NSRegularExpression 删除 html 文件中的整个 head-tag。有人可以给我一个正则表达式吗?

提前致谢, Ph99Ph

【问题讨论】:

@Don: meta.stackexchange.com/questions/73133 【参考方案1】:

没有! HTML 是一种类型 2 语言,因此 不能用正则表达式解析(类型 3)。

如有疑问请联系this wiki article。

很多人使用正则表达式来解析/编辑 HTML。这在简单的情况下效果很好,但完全容易出错。

话虽这么说:您应该使用此正则表达式获得相当可靠的结果:

<head>.+?</head>

这需要“。”也匹配换行符。如果没有,请使用:

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

再说一遍:这很容易出错,不要这样做。

您应该使用的是XML解析器,例如NSXMLParser

【讨论】:

公平地说,这是一个常见的误解,尤其是关于使用正则表达式解析/验证/编辑 html 的大量不明智的在线文章的浪费。我只能全心全意地推荐阅读我在回答中喜欢的 wiki 文章。理解语言的复杂性是一件大事。基本上在计算机科学/编程中无处不在。值得一读。 要匹配换行符,可以使用修饰符:/.*/s @FelixEve: NSRegularExpression 不像 php/PERL/... 其中 regex 的定义类似于 /pattern/flags//pattern/template/flags。相反,您必须为其提供 NSRegularExpressionDotMatchesLineSeparators 位掩码选项。 一条评论,结束标签中的斜线不应该被转义吗? &lt;head&gt;(?:.|\n|\r)+?&lt;\/head&gt; @aUXcoder:这取决于您使用的编程语言是否使用/…/ 正则表达式文字(在这种情况下,您当然是对的)。【参考方案2】:

请参阅RegEx match open tags except XHTML self-contained tags 接受的答案。或自 Stack Overflow 开始以来每天发布的完全相同问题的任何版本。

简而言之,您无法使用正则表达式可靠地解析 HTML。由于 HTML 的复杂性,RegEx 还不够先进。

【讨论】:

【参考方案3】:

使用这样的东西:

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);

【讨论】:

以上是关于正则表达式删除 HTML-head-tag的主要内容,如果未能解决你的问题,请参考以下文章

怎么通过正则表达删除含中文的括号部分但保留含英文的括号部分?

使用正则表达式删除 JavaScript

正则表达式:删除包含“帮助”等的行

Notepad++ 利用正则表达式删除关键词所在行

正则表达式删除特殊字符

需要正则表达式来删除括号[关闭]