我正在尝试创建一个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专家(更不用说正则表达式专家了),但我的代码中至少有任何明显的违规行为吗?
更新
我在网站上运行调试,并从日志中发现其中有一个额外的}
。现在网站没有崩溃,但回显的内容是空白的...代码更新上面
答案 0 :(得分:1)
http://replcaement url.com
非常确定这拼写不正确。
并且该行末尾没有;
。
看起来你已经正确地完成了正则表达式,大多数情况下你还需要逃避一些保留字符看@ Akam的答案。
我建议使用preg quotes.
(?<=href=("|'))[^"']+(?=("|'))
答案 1 :(得分:1)
您的模式中存在语法错误,请将其更改为:
$pattern = "(?<=href=(\"|'))[^\"']+(?=(\"|'))";
错误:
$pattern = "(?<=href=("|'))[^"']+(?=("|'))";
^-- ^--not escaped