2010-03-09 3 views
2

Est-il possible d'utiliser strtolower dans la partie substitution de preg_replace?strtolower inside preg_replace - possible?

Ce ne fonctionne pas:

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); 

Répondre

4

Il est possible, oui. Jetez un oeil sur le modificateur e (Example #4): (. Untested, le nombre d'échapper antislashs peut se tromper)

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

Merci beaucoup jensgram! Spot, sauf que vous avez seulement besoin d'échapper à la "une seule (backslash) gentil! – Haroldo

+0

@Haroldo Super., Édité à la bonne quantité d'échappement – jensgram

1

Je suis favorable à l'aide preg_replace_callback() sur l'utilisation du modificateur e (eval). Je pense que le code est plus propre et qu'il y a moins de place pour l'erreur.

+0

+1 Je suis tenté d'être d'accord avec vous. que la syntaxe pour la fonction anonyme en PHP n'est pas beaucoup plus propre, IMO :) – jensgram

+0

Ya, create_function() est moche, mais en php 5.3+, les fonctions anonyous sont plutôt sympas http://www.php.net/manual/en /functions.anonymous.php – goat