用preg_replace用短代码结构替换href标签

时间:2012-10-26 07:13:36

标签: php regex href bbcode

我正在尝试替换href,我有以下代码:<a href="http://www.mysite.com" target="_blank">My site</a>

与此:

$textarea_content = '<a href="http://www.mysite.com" target="_blank">My site</a>';
$patterns = array(
    "/<a href=/",
    "/target*\=*\'*\_blank*\'*\>/",
    "/<*\/a>/"
);
$replacements = array(
    "[url=",
    "]",
    "[/url]"
);
$textarea_content = preg_replace($patterns,$replacements, $textarea_content);

我需要将链接标记转换为此结构:

[url='http://www.mysite.com']My site[/url]

问题是输出类似于:<a href="" http:="" www.mysite.com''="" target="_blank">My site</a>

我做错了什么?谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

echo preg_replace('/(?:\<a\s+.*href=\"([^\"]*)"[^\>]*\>([^\<]*)\<\/a\>)/', '[url=\'\\1\']\\2[/url]', $text);

假设:

$text = 'Bla bla bla <a href="http://www.mysite.com" target="_blank">My site</a> bla bla bla';

结果:

Bla bla bla [url='http://www.mysite.com']My site[/url] bla bla bla

编辑根据OP的评论如下:

如果想要取回HTML,您只需要这样做:

echo preg_replace('/(?:\[url=\'([^\']*)\'\]([^\[]*)\[\/url\])/', '<a href="\\1" target="_blank">\\2</a>', $parsed);

假设:

$parsed = 'Bla bla bla [url=\'http://www.mysite.com\']My site[/url] bla bla bla';

结果:

Bla bla bla <a href="http://www.mysite.com" target="_blank">My site</a> bla bla bla