2013-10-15 96 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