0

我正在用 curl 解析我的网站(html 代码):

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "http://example.com/product.html");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

$content = curl_exec($ch);

现在我想找到一个特定<span>的带有<a>a 标签包含href带有参数的。[eventUid]=22是否可以通过 preg match找到此参数 ( )?我想22使用 PHP 将来自数据库的 (id) 保存到变量中。

例子:

<span><a title="mytitle" href="http://example.com/products.html?tx_example_pi1[eventUid]=22">example</a></span>
if (preg_match('@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@', $content, $matches)) {
    echo $matches[2];
} else {
    echo 'Nothing found!';
}

目前我只找到了这个 preg 搜索的链接。

4

1 回答 1

1

使用正则表达式搜索 HTML 很容易出错;最好使用 XPath:

$doc = new DOMDocument;
$doc->loadHTML($content);
$xp = new DOMXPath($doc);

foreach ($xp->query('//span/a[contains(@href, "[eventUid]=")]') as $anchor) {
    if (preg_match('/\[eventUid\]=(\d+)/', $anchor->getAttribute('href'), $matches)) {
        echo $matches[1];
    }
}
于 2013-04-09T08:13:16.970 回答