2010-03-09 23 views
2

是否可以在preg_replace的替代部分使用strtolowerprert_replace內的strtolower - 可能嗎?

這不是工作:

preg_replace('/(http:\/\/)?(www\.)?([a-zA-Z0-9\-_\.]+\.(com|co\.uk|org|tv|biz)(\/[a-zA-Z0-9\-\._\?&=#\+;]+)*)/i', '<a href="http://www.'.strtolower('$3').'" target="_blank">'.strtolower('$3').'</a>', $d); 

回答

4

這是可能的,肯定的。看一看在e修飾符(Example #4):(未經測試,逃避反斜槓的數量可能是錯誤的)

preg_replace('/(http:\/\/)?(www\.)?([a-zA-Z0-9\-_\.]+\.(com|co\.uk|org|tv|biz)(\/[a-zA-Z0-9\-\._\?&=#\+;]+)*)/ie', "'<a href=\"http://www.'.strtolower('$3').'\" target=\"_blank\">'.strtolower('$3').'</a>'", $d); 

+0

非常感謝你jensgram! 現貨除了你只需要逃避「一次(單反斜槓)。 不錯的一個! – Haroldo 2010-03-10 08:27:25

+0

@Haroldo很好。編輯到正確的轉義數。 – jensgram 2010-03-10 09:11:18

1

我贊成使用preg_replace_callback()在使用電子(EVAL)修改。我覺得代碼更乾淨,並且有更少的錯誤空間。

+0

+1我很想和你認同。在PHP中的匿名函數的語法不是很乾淨,IMO :) – jensgram 2010-03-10 09:12:12

+0

雅,create_function()是醜陋的。但在PHP 5.3 +,anonyous功能是相當不錯的。http://www.php.net/manual/en /functions.anonymous.php – goat 2010-03-10 16:00:24