1

有没有办法使用 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> ...

谢谢。

4

2 回答 2

1

就像是:

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

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

但是,如果您对这些标签有任何控制权,我真的建议您使用现有的标签方案,如 bbcode,而不是自己发明。有很多用于解析 bbcode 的现有代码,它会比你能想出的任何东西都更加健壮和经过良好测试。你能相信你试图解析的字符串的来源吗?很容易搞砸并造成令人讨厌的安全问题。

于 2012-04-26T21:45:00.947 回答
1

只需使用preg_replace_callback()

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

function callback($m){
    return "<a href=\"$m[2]\">$m[1]</a>";
}
于 2012-04-26T21:45:55.920 回答