PHP Preg_Match_All返回没有结果

时间:2015-07-27 15:11:43

标签: javascript php regex preg-match preg-match-all

我正在使用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);得到相同的结果。关于我做错什么的任何想法?

1 个答案:

答案 0 :(得分:0)

如果您忘记定界符,可以使用T-Regx,它会自动添加定界符。

$matches = pattern('(?<=\d":)\w++')->match($script)->all();