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

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

提前致谢, Ph99Ph

【问题讨论】:

标签: iphone regex cocoa cocoa-touch ios


【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 2010-10-20
      • 1970-01-01
      • 2011-04-16
      • 2020-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多