php - 使用正则表达式从 HTML 标记中获取所有属性
问问题
13194 次
2 回答
3
您可以在该正则表达式上进行构建。看一看:
'/<a(?:\s+(?:href=["\'](?P<href>[^"\'<>]+)["\']|title=["\'](?P<title>[^"\'<>]+)["\']|\w+=["\'][^"\'<>]+["\']))+/i'
...或以人类可读的形式:
preg_match_all(
'/<a
(?:\s+
(?:
href=["\'](?P<href>[^"\'<>]+)["\']
|
title=["\'](?P<title>[^"\'<>]+)["\']
|
\w+=["\'][^"\'<>]+["\']
)
)+/ix',
$subject, $result, PREG_PATTERN_ORDER);
很自我解释,我想。请注意,您的原始正则表达式在出现顺序方面存在相同的问题。例如,它将无法匹配此标签:
<a class="someclass" href="somepage.html">link text</a>
除非您绝对确定不会有其他属性,否则您不能合理href
地期望排在第一位。您可以使用与上述相同的噱头,其中第二个分支默默地消耗并丢弃您不感兴趣的属性:
'/<a
(?:\s+
(?:
href=["\'](?P<href>[^"\'<>]+)["\']
|
\w+=["\'][^"\'<>]+["\']
)
)+/ix',
于 2013-09-02T03:09:23.543 回答
2
试试我不久前制作的这个regextrainer。
该示例包含这样的模式:<([^ ]+) ?([^>]*)>([^<]*)< ?/ ?\1>
它将捕获 html 中的属性。
我现在看到它没有提取属性名称和值,只是提取整个属性文本本身。使用它来提取属性详细信息:((([^=]+)=((?:"|'))([^"']+)\4) ?)+
于 2013-09-01T23:52:21.700 回答