2012-04-26 94 views
1

有没有办法使用preg_match或preg_replace扫描段落并用链接替换每个模式?preg match或preg替换为段落中的链接格式

实施例:

... [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> ... 

感谢。

+1

是的,但如果你有一个方法来识别他们应该如何在像*设置高亮*'[URL = HTTP某种方式被翻译这将是最好的://网站。 com] keyword [/ url]',但如果模式很容易被挑选出来并且不被其他事物使用或混淆,则不需要这样做。 – craniumonempty 2012-04-26 21:11:53

回答

1

喜欢的东西:

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

即假设所有的链接以http:或https:和他们不包含任何双引号。当试图想出这些模式时,http://regexpal.com/是一个很好的工具。但是,如果您对这些标签有任何控制权,我会建议您使用像bbcode这样的现有标签方案,而不是发明自己的标签方案。有很多现有的解析bbcode的代码,它比任何你能想到的都要强大得多,并且测试得很好。你能相信你想分析的字符串的来源吗?把它搞砸并造成讨厌的安全问题真的很容易。

1

只需使用preg_replace_callback()

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

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