【问题标题】:Parse string to get URL within解析字符串以获取其中的 URL
【发布时间】:2025-12-28 23:00:11
【问题描述】:

我有一个由第三方网络服务自动生成的字符串,我想从字符串中获取 URL。字符串如下所示:

'document.write("<div class=\"display_archive\"><div class=\"campaign\">20\/12\/2011 - <a href=\"http:\/\/us2.campaign-archive1.com\/?u=fdf89fgd7sdf7d8&id=ffd89dfef3\" title=\"News\" target=\"_blank\">News<\/a><\/div><\/div>");'

我想检索 URL,在上面的例子中这个 URL:http://us2.campaign-archive1.com/?u=fdf89fgd7sdf7d8&id=ffd89dfef3\ 我想删除转义反斜杠所以 URL 是:http://us2.campaign-archive1.com/?u=fdf89fgd7sdf7d8&id=ffd89dfef3/

我尝试了一些不同的解析器和正则表达式,但我的正则表达式不是那么强,而且似乎无法正确获取 URL。我试过这个 preg_match 但它不起作用,只返回空数组:

%^((http?://)|(www\.))([a-z0-9-].?)+(:[0-9]+)?(/.*)?$%i

非常感谢任何帮助。

真诚
- 梅斯蒂卡

【问题讨论】:

    标签: php string parsing preg-match preg-match-all


    【解决方案1】:

    试试这个:

    <?php
    $response = 'document.write("<div class=\"display_archive\"><div class=\"campaign\">20\/12\/2011 - <a href=\"http:\/\/us2.campaign-archive1.com\/?u=fdf89fgd7sdf7d8&id=ffd89dfef3\" title=\"News\" target=\"_blank\">News<\/a><\/div><\/div>");';
    
    preg_match('/href=\\\\\"([^\"]+)/', $response, $matches);
    
    echo 'Raw URL: ' . $matches[1] . '<br />';
    echo 'Clean URL: ' . stripslashes($matches[1]);
    ?>
    

    【讨论】:

      【解决方案2】:

      由于斜线,您的正则表达式无法正常工作。只需通过 stripslashes() 传递字符串,然后应用正则表达式

      【讨论】:

        【解决方案3】:

        您是否尝试过 str_replace()。例如)

        $url = "http:\/\/us2.campaign-archive1.com\/?u=fdf89fgd7sdf7d8&id=ffd89dfef3";
        $url = str_replace('\\', '', $url);
        

        【讨论】: