1

我正在尝试创建一个 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 专家(更不用说正则表达式专家),但我的代码中至少有任何明显的违规行为吗?

更新:

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

4

2 回答 2

1

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

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

错误:

    $pattern = "(?<=href=("|'))[^"']+(?=("|'))";
                          ^--            ^--not escaped
于 2013-09-11T19:41:14.067 回答
1

http://replcaement url.com很确定这是拼写错误。

并且行尾没有一个;

看起来您在大多数情况下都正确地完成了正则表达式,您还需要转义一些保留字符查看@Akam 的答案。

我建议使用preg 引号。

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

正则表达式可视化

在 Debuggex 上实时编辑

于 2013-09-11T19:37:06.517 回答