【问题标题】:php Regular expression adding link to hrefphp正则表达式添加链接到href
【发布时间】:2012-12-01 22:37:03
【问题描述】:

嗨,我是编程新手。 我不知道如何编写一个 php regulat 表达式来在 href=" 和它之后的一些文本之间添加一些东西 这个怎么做

<a class="aaa" href="/some/file.html">

看起来像

<a class="aaa" href="http://www.example.com/some/file.html">

必须将链接与“aaa”类匹配。

谁能帮帮我?

【问题讨论】:

    标签: php regex html-parsing


    【解决方案1】:

    你可以这样做:

    $string = '<a class="aaa" href="/some/file.html">';
    $pattern = '~class="aaa" href="(.*)"~isU'; 
    preg_match($pattern, $string, $matches);
    
    $string = str_replace($matches[1],"http://www.example.com".$matches[1],$string);
    
    echo $string;
    

    已编辑以匹配 class="aaa" 但如果您经常这样做,我也会推荐 m.buettners 方式。

    【讨论】:

    • 再次将正则表达式应用于所有链接(不仅是 aaa 类的链接)。另外,href="之后不需要匹配和捕获任何东西
    • 你说得对,我读过“有必要将链接与“aaa”类匹配。” - 我的错。关于简单的 html dom,我也同意你的看法,我经常使用它。我只是觉得这个任务很简单,所以他可以使用正则表达式。
    • 感谢您重播,但我收到此消息:警告:preg_match() 期望参数 2 为字符串,数组中给出
    【解决方案2】:

    You better don't even start trying to do this with regular expressions.

    您应该使用 DOM 解析器来处理此类任务。例如,This one 让您的生活变得非常轻松。

    $html = new simple_html_dom();
    $html->load($input);
    
    foreach($html->find('a[class=aaa]') as $link)
        $link->href = "http://www.example.com".$link->href;
    
    $result = $html->save();
    

    find 让您可以很好地查询 DOM。参数是tagtype[attributeName=attributeValue],其中方括号是可选过滤器。然后,您只需遍历此函数找到的每个链接,并在您的域前面加上 href 属性。

    如果由于某种原因您不能使用 3rd-party 库,PHP 自带了一个内置的DOM module。代码不会那么短和优雅,但它仍然比尝试提出一个健壮的正则表达式更可取。

    【讨论】:

    • 我真的很感谢您的帮助,我知道如果我知道如何使用它会起作用,但我无法将我的代码与您的代码放在一起,您可以在下面的帖子中快速预览一下吗,我发布了我的代码作为答案。非常感谢你 m.buettner
    • ps。我不知道如何在我的文件中包含那个简单的 HTML DOM
    • 这是一个很好的例子。我已将其添加到 htmlparsing.com/php.html,以便将来的 HTML 解析器可以看到它。
    • @user1898399 你从here 下载php 文件,把它放到你的项目中并在某个地方调用include "simple_html_dom.php";。然后将下面代码中的变量重命名为$input,然后复制我的代码。顺便说一句,您也可以使用simple_html_dom 找到example-div。根本不需要正则表达式
    猜你喜欢
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-22
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多