我想从网址获取元标签。如果存在数据属性值,则无法正确提取。如何更改正则表达式?
HTML 代码
1. <meta property="og:title" content="111">
2. <meta data-one="true" property="og:description" content="222">
3. <meta data-two="true" property="og:image" content="333">
4. <meta data-three="true" data-another="true" property="og:url" content="444">
PHP 代码
preg_match_all('~<\s*meta\s*property="(og:[^"]+)"\s*content="([^"]*)~i', $html, $matches);
结果
Array(
[0] => og:title
)
希望结果
Array(
[0] => og:title,
[1] => og:description,
[2] => og:image,
[3] => og:url
)
问题在于第二个和第三个
\s*
,它表示匹配零个或多个空格。但是,在第二种情况下,您想要匹配 \b.*\b
、单词边界(meta
的结尾),然后是任何内容,然后是新的单词边界(property
的开头)。对于第三种情况,需要 \s.*\b
,因为 "
不是单词边界,所以你的固定正则表达式是:
preg_match_all('~<\s*meta\b.*\bproperty="(og:[^"]+)"\s.*\bcontent="([^"]*)~i', $html, $matches);
请参阅此处的示例。