如何在满足条件时使用preg-replace

时间:2014-12-26 05:19:46

标签: php

我已经有代码可以替换链接,例如

$pattern = "/href=['\"]{0,1}(\/|http:\/\/)/";
$replacement = "href=http://example.com/index.php?go=\\1";
$string = preg_replace($pattern, $replacement, $html);

这适用于任何包含" http "的链接但现在我需要替换缺少" http "的链接。有不同的替代品,例如......

 href="/images/some.gif"

需要改为......

href="http://example.com/images/some.gif"

有时链接可能就像

href="images/some.gif" without the / or even without the ".

3 个答案:

答案 0 :(得分:1)

希望您正在尝试匹配

href="http://example.com/images/some.gif"
href="images/some.gif"

并替换为

href="http://example.com/index.php?go=http://example.com/images/some.gif"
href="http://example.com/index.php?go=images/some.gif"

尝试此模式并替换:

$pattern = '(href=["\']){1}(http:\/\/)?([a-z0-9_\-.\/]*)("|\'){1}';
$replacement = 'href="http://example.com/index.php?go=$2$3"';

Live demo

[编辑]

根据您的评论,如果您要匹配无引号的HTML属性值,请将?附加到["\'],使其["\']?并将("|\'){1}更改为{{1} }}。它不是标准的HTML,但不推荐使用它。

("|\')?

Updated Live Demo

答案 1 :(得分:0)

您可以使用:

$html = preg_replace('~((?:src|href)=["\']?)(?!http://)/?~', '$1http://', $html);

RegEx Demo

但是,您应该考虑使用DOM来可靠地操纵HTML。

答案 2 :(得分:0)

使用preg_replace_callback应该解决它 像这样的东西 -

$html_list = Array(
                'href="images/some.gif"',
                'href="/images/some.gif"', 
                'href="http://example.com/images/some.gif"',
                'href=some.gif'
            );
$pattern = "/((?:href)=['\"]{0,1})(?:(\/)|([a-zA-Z])|(http:\/\/))/";
$replacement = "href=http://example.com/index.php?go=\\1";
foreach($html_list as $html){
    $string = preg_replace_callback($pattern,
                function($m){
                    //print_r($m);
                    $r = $m[1];
                    if(!empty($m[2])){
                        return $r.'http://example.com/';

                    }if(isset($m[3]) && !empty($m[3])){
                        return $r.'http://example.com/'.$m[3];
                    }
                    //This matches http part
                    return $r.'http://example.com/index.php?go=';
                }
                , $html);
    print_r($string."\n");
}

输出 -

href="http://example.com/images/some.gif"
href="http://example.com/images/some.gif"
href="http://example.com/http://example.com/images/some.gif"
href=http://example.com/some.gif