2009-12-10 4 views

Répondre

3

Vous pouvez utiliser le e modifier sur un modèle d'expression régulière lorsqu'il est administré à preg_replace (jetez un oeil à l'exemple n ° 4 sur cette page) afin d'appeler du code PHP dans le cadre du remplacement:

$string = "x-example-HEADER:teSt"; 
$new_string = preg_replace('/(^.+)(?=:)/e', "strtolower('\\1')", $string); 
// => x-example-header:teSt 

Le modèle va saisir tout avant le premier deux-points dans la première référence arrière, puis le remplacer par la fonction strtolower.

+0

c'est une nouvelle pour moi! Merci – Galen

4

utilisation preg_replace_callback():

Vous ne pouvez pas faire d'autres cas de conversion avec des expressions régulières sauf dans des cas spécifiques (par exemple remplacer 'A' par 'a' est possible).

Editer: Ok, vous apprenez quelque chose de nouveau tous les jours. Vous pouvez le faire:

$output = preg_replace('![a-zA-Z]+:!e', "strtoupper('\\1')", $input); 

De Pattern Modifiers:

e (PREG_REPLACE_EVAL)

Si ce modificateur est défini, preg_replace()-t substitution normal de références arrières dans le chaîne de remplacement, l'évalue comme le code PHP, et utilise le r Esult pour en remplaçant la chaîne de recherche. Les guillemets simples, les guillemets doubles, les barres obliques inversées() et les caractères NULL seront remplacés par les barres obliques inversées dans les références substituées.

Seul le preg_replace() utilise ce modificateur ; il est ignoré par d'autres fonctions PCRE .

Je voudrais cependant hésiter à cordes ING eval(), en particulier lorsqu'il est combiné avec l'entrée d'utilisateur, il peut être un très pratique dangereuse. Je préférerais l'approche preg_replace_callback() en règle générale.

2
$str = 'y-exaMPLE:testoneTWOthree'; 
function lower($str) { 
    return strtolower($str[1]); 
} 

echo preg_replace_callback('~^([^:]+)~', 'lower', $str); 
Questions connexes