搜索和替换URL - 正则表达式?

时间:2013-09-11 19:33:47

标签: php regex wordpress

我正在尝试创建一个WordPress短代码(其中的WordPress部分不相关),它将在某些指定的文本中搜索链接并将其替换为我指定的链接。例如:

[scode]Click on <a href="www.X.com">this link</a>[scode]
[scode]Click on <a href="www.Y.com">this link</a>[scode]

...将更改为:

[scode]Click on <a href="www.Z.com">this link</a>[scode]

我正在尝试组合一个搜索链接的函数,并将其替换为我指定的链接。这就是我现在所拥有的:

// Adds [hide] shortcode for hiding content from non-registered users.

function hide_text( $atts,$content) {
    if ( is_user_logged_in () ) {
        return $content;
    }
    else {
        $pattern = '(?<=href=("|\'))[^"\']+(?=("|\'))';
        $newurl = "http://replacementurl.com";
        $content = preg_replace($pattern,$newurl,$content);
        echo $content;
          }
    }
add_shortcode( 'hide', 'hide_text' );

但这只会使网站崩溃。我不是PHP专家(更不用说正则表达式专家了),但我的代码中至少有任何明显的违规行为吗?

更新

我在网站上运行调试,并从日志中发现其中有一个额外的}。现在网站没有崩溃,但回显的内容是空白的...代码更新上面

2 个答案:

答案 0 :(得分:1)

http://replcaement url.com非常确定这拼写不正确。

并且该行末尾没有;

看起来你已经正确地完成了正则表达式,大多数情况下你还需要逃避一些保留字符看@ Akam的答案。

我建议使用preg quotes.

(?<=href=("|'))[^"']+(?=("|'))

Regular expression visualization

Edit live on Debuggex

答案 1 :(得分:1)

您的模式中存在语法错误,请将其更改为:

    $pattern = "(?<=href=(\"|'))[^\"']+(?=(\"|'))";

错误:

    $pattern = "(?<=href=("|'))[^"']+(?=("|'))";
                          ^--            ^--not escaped