正则表达式:匹配HTML文件中的所有alt属性


Regular expressions: matching all alt attributes in an HTML file?

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

我有一个问题,在PHP正则表达式。我试图得到一个HTML文件的"alt"属性的所有文本。我考虑到所有可能的标签名称(img,输入和区域)和所有类型的可能性,如字符之间的空格和换行(如<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解析器来处理这样的事情,但是我担心这种做法可能会消耗多少资源。你觉得这样更好吗?谢谢你!

使用解析器绝对是正确的方法。

Regex非常不适合这种类型的任务,甚至Jon Skeet也不能使用正则表达式

解析HTML。

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

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

你可以看看StackOverflow问题健壮,成熟的HTML解析器对于PHP的一些建议,哪些解析器是值得使用的