有没有办法使用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> ...
感谢。
答案 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>";
}