我一直在查看问题并更好地了解我的问题,但仍未找到答案。
我在PHP中遇到正则表达式问题。我正在尝试获取HTML文件的“alt”属性中的所有文本。我考虑了所有可能的标签名称(img,输入和区域)以及所有类型的可能性,例如字符之间的空格和换行符(如<img alt = "Hello">
)。还必须注意匹配字符串可以用单引号或双引号括起来,并在其中包含其他(不同的)引号,例如:<img alt="Alan's picture">
或<img alt='Example for the word "hello" in the text'>
。
这对我来说变得很难(我是正则表达式的初学者)所以我只会告诉你我得到了什么。请注意,我正在尝试在字符类中使用backrefernce,我发现这是一种错误的做法(或者我认为)。
'/<\s*(?:img|input|area)\s[^>]*alt\s*=\s*("|\')([^\1>]*)\1[^>]*>/siU'
我也在StackOverflow中看到,有些人推荐像这样的东西使用HTML解析器,但我担心这种做法可能耗费多少资源。你认为这是一个更好的主意吗?谢谢!
答案 0 :(得分:2)
使用解析器绝对是可行的方法。
正则表达式非常不适合此类任务,even Jon Skeet cannot parse HTML using regular expressions
答案 1 :(得分:0)
绝对应该使用解析器。这有几个原因:
alt='why can't I do this'
alt="why the long space"
您可以查看StackOverflow问题Robust, Mature HTML Parser for PHP,了解有关哪些解析器值得使用的建议。