Php 从字符串中提取onclick值的正则表达式

Php 从字符串中提取onclick值的正则表达式,php,regex,Php,Regex,嗨,我正试图从javascript onclick中获得确切的值 以下是我的示例链接: onclick="omniture('Touchpad_8.0.7.2.ZIP','NP-N150P');downloadFile('http://xxx.com/downloadfile/ContentsFile.aspx?CDSite=UNI_CO&CttFileID=3017288&CDCttType=DR&ModelType=N&ModelName=NP-N150P&a

嗨,我正试图从javascript onclick中获得确切的值

以下是我的示例链接:

onclick="omniture('Touchpad_8.0.7.2.ZIP','NP-N150P');downloadFile('http://xxx.com/downloadfile/ContentsFile.aspx?CDSite=UNI_CO&CttFileID=3017288&CDCttType=DR&ModelType=N&ModelName=NP-N150P&VPath=DR/201105/20110509115437867/Touchpad_8.0.7.2.ZIP','ZIP');return false;"
Lan o red inalambrica BROADCOM - 5.100.82.95 - onclick="omniture('WLAN_Broadcom_5.100.82.95.ZIP','NP-N150P');downloadFile('http://xxx.com/downloadfile/ContentsFile.aspx?CDSite=UNI_CO&CttFileID=3017290&CDCttType=DR&ModelType=N&ModelName=NP-N150P&VPath=DR/201108/20110817201634927/WLAN_Broadcom_5.100.82.95.ZIP','ZIP');return false;"
<pre><?php
$html = <<<LOD
<html><head></head><body>
<table>
    <thead></thead>
    <tbody id="tbodyDR">
    <tr><td>bidule
    <a href="#" onclick="dothis('abcd','1234');downloadFile('http://example.com/bidule.ZiP','ZiP');return false;">bidule</a>
    </td></tr>
    <tr><td>truc
    <a href="#" onclick="dothis('abcd','1234');downloadFile('http://example.com/truc.zIP','zIP');return false;">truc</a>
    </td></tr>
    <tr><td>bidule
    <a href="#" onclick="dothis('abcd','1234');downloadFile('http://example.com/machin.zIp','zIp');return false;">machin</a>
    </td></tr>
    </tbody>
</body></html>
LOD;

$doc = new DOMDocument();
//@$doc->loadHTMLFile('http://example.com/list.html');
@$doc->loadHTML($html);
$links = $doc->getElementById('tbodyDR')->getElementsByTagName("a");

foreach($links as $link) {
    $onclickAttr = $link->getAttribute('onclick');
    if( preg_match("~downloadFile\('\K[^']++~", $onclickAttr, $match) )
        $result[] = $match[0];
}
print_r($result);
以下是我正在尝试的:

preg_match_all(
    "~onclick\s*=\s*([\"\'])(.*?)\\1~si", $d_l, $match);
$link = $match[0][0];
我得到的是完整的onclick,而不是确切的值,我希望得到作为输出的链接:

(
http://xxx.com/downloadfile/ContentsFile.aspx?CDSite=UNI_CO&CttFileID=3017290&CDCttType=DR&ModelType=N&ModelName=NP-N150P&VPath=DR/201108/20110817201634927/WLAN_Broadcom_5.100.82.95.ZIP)

有谁能帮忙吗?

$match[0][$i-1]
是整个
$i
-th匹配,
$match[1][$i-1]
对应于
$i
-th匹配中的第一个子匹配,以此类推

要仅获取链接,请尝试以下操作:

preg_match_all(
    "~onclick\s*=\s*([\"\']).*?downloadFile\(([\"'])(.*?)\\2.*?\).*?\\1~si",
    $d_l, $match
);
foreach ($matches[3] as $link)
    echo $link, "<br>\n";
preg\u match\u all(
“~onclick\s*=\s*([\“\')).*?下载文件\([\“'))(.*?\\2.*).\\1~si”,
$d_l,$match
);
foreach($matches[3]作为$link)
echo$link,“
\n”;
$match[0][$i-1]
是整个
$i
-th匹配,
$match[1][$i-1]
对应于
$i
-th匹配中的第一个子匹配,以此类推

要仅获取链接,请尝试以下操作:

preg_match_all(
    "~onclick\s*=\s*([\"\']).*?downloadFile\(([\"'])(.*?)\\2.*?\).*?\\1~si",
    $d_l, $match
);
foreach ($matches[3] as $link)
    echo $link, "<br>\n";
preg\u match\u all(
“~onclick\s*=\s*([\“\')).*?下载文件\([\“'))(.*?\\2.*).\\1~si”,
$d_l,$match
);
foreach($matches[3]作为$link)
echo$link,“
\n”;
关于如何正确执行此操作的示例:


关于如何正确执行此操作的示例:


请避免使用正则表达式解析HTML。改为使用。第二个数组[0]元素中有什么<代码>$link=$match[0][1]。但我同意bwoebi-使用解析器。我使用的是简单的HTMLDOM,但无法从onclick获得确切的值。。。所以我用的是preg_match_all…请不要用正则表达式解析HTML。改为使用。第二个数组[0]元素中有什么<代码>$link=$match[0][1]。但我同意bwoebi-使用解析器。我使用的是简单的HTMLDOM,但无法从onclick获得确切的值。。。所以我用的是preg_match_all。。。