2013-10-15 97 views
0

我想用一个生成的值,使用该特定的id替换链接中的一个id。比如我有(可能)包含链接的字符串:用链接替换链接哈希使用链接

Lorem ipsum dolor sit amet, consectetur adipiscing elit 
http://www.example.com/file/1 

Curabitur volutpat nulla purus, vitae pharetra diam commodo porttitor 
http://www.example.com/file/2 

我要替换这两个ID与功能,这是我改变取决于他们是在页面上的结果(在这种情况下,唯一的将每个页面上的链接链接到相同的文件)。我想我需要一个preg_replace(),但我如何将id作为变量传递给替换函数?

例如,像(伪代码):

function hash_it($file_id, $page_id) { 
    return md5($file_id . $page_id); 
} 
$page_id = 1; 
$text = preg_replace('"\b(http://www.example.com/file/\d+)"', hash_it($1, $page_id), $text); 

提前感谢!

回答

0

如果你想有一个回调来代替你的数据,然后使用preg_replace_callback(),如:

$text = preg_replace_callback('/\b(http\:\/\/www\.example\.com\/file\/\d+)/', 'hash_it', $text); 

- 你不应该忘记的正则表达式的分隔符也(他们应该在PHP非aplphanumeric,我的样本在它的/)。当然,还有一些特殊的正则表达式,如.

现在,关于你的回调函数:它将与完全匹配的数据数组一起工作,而不是像你定义的那样(单独的参数) - 请参阅示例手册页。

+0

感谢您的回答,不知道preg_replace_callback()函数。但是...我如何将id传递给函数? – Wietse

+0

@Wietse正如我所说,请参阅样本的手册页。如果你想在回调函数中的数组中找到它,你必须使用'()' –

+0

对你的正则表达式进行分组。这是我需要的!变量$ matches [2]给了我我需要的:id。谢谢! – Wietse