drvxclagw656708070
drvxclagw656708070
2013-06-22 19:40

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

已采纳

Hi I am trying to get exact value from javascript onclick.

Here is my example link:

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;"

here is what I am trying:

preg_match_all(
    "~onclick\s*=\s*([\"\'])(.*?)\\1~si", $d_l, $match);
$link = $match[0][0];

I am getting full onclick not the exact value, I want to get link as output:

(
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)

Can any one help please?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • duankuiyuant3940 duankuiyuant3940 8年前

    An example on how you can do this properly:

    <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);
    
    点赞 评论 复制链接分享
  • dou12754 dou12754 8年前

    $match[0][$i-1] is the whole $i-th match, $match[1][$i-1] corresponds to the first submatch in the $i-th match, etc.

    To get just the links, try this:

    preg_match_all(
        "~onclick\s*=\s*([\"\']).*?downloadFile\(([\"'])(.*?)\\2.*?\).*?\\1~si",
        $d_l, $match
    );
    foreach ($matches[3] as $link)
        echo $link, "<br>
    ";
    
    点赞 评论 复制链接分享

相关推荐