【问题标题】:Regular expressions: matching all alt attributes in an HTML file?正则表达式:匹配 HTML 文件中的所有 alt 属性?
【发布时间】:2011-11-04 16:11:49
【问题描述】:

我一直在查看问题,对我的问题有了更好的了解,但仍然没有找到答案。

我在 PHP 中遇到了正则表达式的问题。我正在尝试获取 HTML 文件的“alt”属性中的所有文本。我正在考虑所有可能的标签名称(img、input 和 area)和各种可能性,比如字符之间的空格和换行符(比如<img alt = "Hello">)。还必须注意,匹配字符串可以用单引号或双引号括起来,并在内部包含其他(不同的)引号,例如:<img alt="Alan's picture"><img alt='Example for the word "hello" in the text'>

这对我来说变得越来越困难(我是正则表达式的初学者),所以我将向您展示我所得到的。请注意,我试图在字符类中使用反向引用,我发现这是一种错误的做法(或者我认为)。

'/<\s*(?:img|input|area)\s[^>]*alt\s*=\s*("|\')([^\1>]*)\1[^>]*>/siU'

我在 StackOverflow 中也看到过,有些人推荐 HTML 解析器来处理此类内容,但我担心这种做法可能会消耗多少资源。你认为这是一个更好的主意吗?谢谢!

【问题讨论】:

  • 而且您并不担心正则表达式解决方案会消耗多少资源(CPU 和人工维护)?
  • 这就是我的意思... HTML 解析器会消耗更多资源吗?或更少?我现在正在尝试使用 HTML 解析器替代方案,但我想更好地了解哪种方法消耗的资源更少。

标签: php html regex alt


【解决方案1】:

使用解析器绝对是要走的路。

正则表达式非常不适合这类任务,even Jon Skeet cannot parse HTML using regular expressions

【讨论】:

    【解决方案2】:

    绝对应该使用解析器。这有几个原因:

    • HTML 解析器库可以解决正则表达式遗漏的损坏(或其他格式错误)的 HTML;例如,某些网页将无法转义嵌入在 alt 属性中的引号,例如 alt='why can't I do this'
    • 解析器将能够自动处理转义字符;例如,alt="why the long space"
    • 此外,HTML 解析器可能会提供速度和 API 优势

    您或许可以查看 StackOverflow 问题 Robust, Mature HTML Parser for PHP,了解有关哪些解析器值得使用的一些建议。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-03
      • 2016-08-08
      相关资源
      最近更新 更多