PHP PregMatch错误,提取空格

时间:2016-11-25 11:09:00

标签: php regex expression

我想从网络资源中提取数据,但我在preg match中遇到错误

    <?php

$html=file_get_contents("https://www.instagram.com/p/BJz4_yijmdJ/?taken-by=the.witty");
preg_match("("instapp:owner_user_id" content="(.*)")", $html, $match);
$title = $match[1];

echo $title;
?>

这是我得到的错误

  

解析错误:语法错误,意外&#39; instapp&#39; (T_STRING)in   第4行/home/ubuntu/workspace/test.php

请帮帮我怎么做?我还想用正则表达式从页面中提取更多数据,那么是否可以使用单个代码一次性提取所有数据?或者我想多次使用pregmatch?

1 个答案:

答案 0 :(得分:0)

主要问题是您没有形成有效的字符串文字。请注意,PHP支持单引号和双引号字符串文字,您可以使用它来获得优势:

preg_match('~"instapp:owner_user_id" content="([^"]*)"~', $html, $match);

虽然可以使用配对的(...)符号作为正则表达式分隔符,但我建议使用更传统的/~ / @符号。< / p>

此外,(.*)是一个过于通用的模式,可能比您需要的更多,因为.也匹配"*是一个贪婪的修饰符,一个否定的字符类比([^"]*)更好," - 0+个字符。

HOWEVER ,要解析PHP中的HTML,您可以使用DOM解析器,例如DOMDocument

以下示例获取具有meta属性的所有content标记并提取该属性的值并保存在数组中:

$html = "<html><head><meta property=\"al:ios:url\" content=\"instagram://media?id=1329656989202933577\" /></head><body><span/></body></html>";
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);

$xpath = new DOMXPath($dom);
$metas = $xpath->query('//meta[@content]');
$res = array();
foreach($metas as $m) { 
   array_push($res, $m->getAttribute('content'));
}
print_r($res);

请参阅PHP demo

要仅获取id属性等于content的{​​{1}}代码的meta属性值中的property,请使用

al:ios:url

请参阅another PHP demo