正则表达式删除 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
位掩码选项。
一条评论,结束标签中的斜线不应该被转义吗? <head>(?:.|\n|\r)+?<\/head>
@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的主要内容,如果未能解决你的问题,请参考以下文章