html上的Regexp不能从meta中提取特定文本

时间:2016-05-10 19:47:02

标签: php regex web-scraping

研究员我有以下字符串:

<meta charset="UTF-8">

那也可以     

通过html字符串,我想提取UTF-8。我尝试了以下代码:

preg_match_all('/^(<\s*meta\s*) charset=[^"]\s*($>)*/ix', $contents, $matches);

但不知何故不起作用,我不知道为什么。

3 个答案:

答案 0 :(得分:0)

preg_match_all('/^<meta\s[^>]*charset=["\']([^>]+)["\'])/i', $contents, $matches);

charset=[^"]\s*($>)*你有几个问题 [^"] =不是“
\s* =零个或多个空格(这没关系,但不必要)
($>)* =不确定你的意图是什么。 $锚定到字符串的末尾...所以你试图匹配/捕获零或更多(字符串结尾后的“&gt;”)...(它总是为零)

答案 1 :(得分:0)

对于此类情况,使用DOMDocument类将更合适,更准确:

$html_string = '<meta charset="UTF-8">';
$doc = new \DOMDocument();
$doc->loadHTML($html_string);
$charset = $doc->childNodes->item(1)->getElementsByTagName("meta")->item(0)->getAttribute("charset");

print_r($charset);  // "UTF-8"

答案 2 :(得分:0)

Finnaly我开始喘着粗气,从HTTP标头中获取编码