我正在使用Simple HTML Dom Parser从网页中抓取脚本标记,然后尝试使用preg_match_all()从所述标记中解析某些数据。但是,当我打印preg_match_all时,不会返回任何结果。
以下是我使用的代码:
<head>
<?php
require_once "toolkit/http.php";
require_once "toolkit/web_browser.php";
require_once "toolkit/simple_html_dom.php";
?>
</head>
<body>
<?php
$prod_url = 'http://www.domain.com/subpage.html';
$html = file_get_html($prod_url);
$script = $html->find('script', 17);
//echo $script;
preg_match_all('(?<=\d":)\w++', $script, $matches);
print_r($matches);
?>
</body>
我可以看到HTML Simple Dom代码正常工作,因为我得到了回显$script
变量时的结果。结果是:
<script type="text/javascript">
var PRODUCT_JSON = {
"Def":{
"default":202705111,
"Listing:[{
"label":"Includes",
"options":[
{label:"All", id: "884"},
{label:"None", id: "485"},
]
}],
"Lookup":{
"1":202705111,
"0":202493236
}
}
};
</script>
所以,问题似乎与我在preg_match_all()中使用的正则表达式有关。正则表达式的目标是在脚本标记的末尾附近返回两个数字202705和202493。它可能与转义双引号或括号有关,但我也尝试preg_match_all('\(?<=\d\":\)\w++', $script, $matches);
得到相同的结果。关于我做错什么的任何想法?
答案 0 :(得分:0)
如果您忘记定界符,可以使用T-Regx,它会自动添加定界符。
$matches = pattern('(?<=\d":)\w++')->match($script)->all();