【发布时间】:2014-05-18 19:29:48
【问题描述】:
什么是使用 regex 和 preg_match_all 获取所有 href 标签的一般方法,因为标签并不总是按顺序排列。
例子:
<link href="foo.css" rel="stylesheet" type="text/css"/>
<link type="text/css" href="bar.css" rel="stylesheet"/>
<link rel="stylesheet" type="text/css" href="bar1.css"/>
<link type="text/css" href="bar2.css" rel="stylesheet"></link>
<link href="path/foo.css" rel="stylesheet" type="text/css"/>
应该导致:
Array(
'foo.css',
'bar.css',
'bar1.css',
'bar2.css',
'path/foo.css',
)
【问题讨论】:
-
一般的方法是不要这样做,而是使用
SimpleDOM或类似的东西。 -
我正在读取仅包含这些元素的文件。谢谢你。 -- 另外,SimpleDOM / etc --- 非常慢,用于完整 HTML 页面的 DOM 处理,而不是用于文件解析。
-
至于否决的实际原因:Regex is not suitable for parsing HTML,而您在解决问题方面并没有付出太多努力。
-
@FabrícioMatté - 无论有没有标题,最好的问题都会被否决,因为它是匿名的。感谢您为否决投票的理由。虽然正则表达式不适合解析 HTML - 它适用于解析 HTML 段(例如,如果上面是文件的唯一内容,则 DOM 解析将不起作用,因为没有 DOM)。此外,DOM 解析器的使用假定已安装并启用一个解析器。 DOM 解析也很慢,并且只适用于“渲染”的内容。
-
@FabrícioMatté - 通过渲染内容,我的意思是页面被渲染到 DOM 中,并且生成的页面可能与源本身不同。在处理在线页面时,当然 DOM 是更好的解决方案——大多数时候。
标签: php css regex preg-match-all