preg_match或preg_replace来格式化段落中的链接

时间:2012-04-26 21:07:31

标签: php preg-replace preg-match

有没有办法使用preg_match或preg_replace来扫描段落并用链接替换每个模式?

示例:

... [keyword][http://mysite.com/keyword/] ... [another-keyword][http://mysite.com/another-keyword] ...

其中如下:

... <a href="http://mysite.com/keyword/">keyword</a> ... <a href="http://mysite.com/another-keyword/">another-keyword</a> ...

感谢。

2 个答案:

答案 0 :(得分:1)

类似的东西:

preg_replace('/\[([^\]]+)\]\[(https?:[^\]"]+)\]/i','<a href="$2">$1</a>',$string);

假设所有链接都以http:或https:开头,并且它们不包含任何双引号。在尝试提出这些模式时,http://regexpal.com/是一个不错的工具。

但是,如果您对这些标记有任何控制权,我建议您使用现有的标记方案,如bbcode,而不是发明自己的标记。有许多现有的解码bbcode的代码,它将比你能想到的任何东西更加强大和经过充分测试。你能相信你想要解析的字符串的来源吗?这很容易搞砸,造成令人讨厌的安全问题。

答案 1 :(得分:1)

只需使用preg_replace_callback()

$out = preg_replace_callback('!\[([^\[\]]+)\]\[([^\[\]]+)\]!', 'callback', $in);

function callback($m){
    return "<a href=\"$m[2]\">$m[1]</a>";
}