我試圖想出一種方法來查找字符串中的所有RegEx匹配,然後通過我寫的函數運行所有這些匹配,但我沒有運氣。使用PHP函數與正則表達式匹配
具體來說,我試圖找到一個字符串中的所有電子郵件地址,然後使用一個函數將這些地址轉換爲有用的mailto鏈接,這些鏈接隱藏垃圾郵件機器人的地址。
因此,我從普通的舊RegEx開始將地址轉換爲mailto鏈接,只是讓我知道這些匹配正在工作。
$pattern = '#([0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-wyz][a-z](fo|g|l|m|mes|o|op|pa|ro|seum|t|u|v|z)?)#i';
$replacement = "<a href='mailto:\\1'>\\1</a>";
$description = preg_replace($pattern, $replacement, $description);
工程很好。到現在爲止還挺好。但是,當我嘗試使用我的函數來操縱地址字符串時,電子郵件地址不再匹配。
$pattern = '#([0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-wyz][a-z](fo|g|l|m|mes|o|op|pa|ro|seum|t|u|v|z)?)#i';
$replacement = myFunction('\\1');
$description = preg_replace($pattern, $replacement, $description);
我在做什麼錯?
['preg_replace_callback'](http://php.net/preg_replace_callback)是你正在尋找的。 – mario