0

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

我对 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 解析器来处理类似的东西,但我担心这种做法可能会消耗多少资源。你认为这是一个更好的主意吗?谢谢!

4

2 回答 2

2

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

正则表达式非常不适合这类任务,甚至 Jon Skeet 也无法使用正则表达式解析 HTML

于 2011-11-04T16:23:25.170 回答
0

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

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

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

于 2011-11-04T16:26:19.627 回答