我想从网络资源中提取数据,但我在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?
答案 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