[PHP] Expression reguliere

Fermé
galio - 24 août 2011 à 11:08
frenzer Messages postés 521 Date d'inscription samedi 27 juin 2009 Statut Membre Dernière intervention 2 septembre 2012 - 24 août 2011 à 13:08
Bonjour,

j'ai une expression regluiere qui fonctionne:

if (preg_match( '~Mlle(.+)<br />~', $email, $customer_last_name )
|| preg_match( '~Mr(.+)<br />~', $email, $customer_last_name )
|| preg_match( '~Mme(.+)<br />~', $email, $customer_last_name )
|| preg_match( '~M.(.+)<br />~', $email, $customer_last_name ))

mais elle est un peu longue comme vous voyez... Existe-t-il une solution plus compacte?

J'ai deja essayé:

preg_match( '~Mlle|Mr|Mme|M.(.+)<br />~', $email, $customer_last_name ))

ca ne fonctionne pas...


merci d'avance
A voir également:

2 réponses

Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 185
24 août 2011 à 12:29
Je pense qu'il va y avoir un autre problème... Prenons un exemple :

M. Dupont<br />
blablabla<br />
bla.<br />

Si ta regexp passe là-dessus, elle va récupérer tout le texte et s'arrêter au dernier <br />. C'est à cause du (.+) . Même si les chaînes ne sont pas censées contenir de <br /> suplémentaires, il vaut mieux ne pas prendre de risque. Utilise l'option U pour rendre la regexp non gourmande (ungreedy).

preg_match('~(Mlle|Mr|Mme|M\.)(.+)<br />~U', $email, $customer_last_name));

https://www.php.net/manual/fr/reference.pcre.pattern.modifiers.php

De plus, en rajoutant des parenthèses, tu modifies le résultat inséré dans $customer_last_name. Si tu n'as pas besoin de conserver le résultat, utilise un groupe non capturant (?: ... )

preg_match('~(?:Mlle|Mr|Mme|M\.)(.+)<br />~U', $email, $customer_last_name));
1
frenzer Messages postés 521 Date d'inscription samedi 27 juin 2009 Statut Membre Dernière intervention 2 septembre 2012 168
24 août 2011 à 13:08
+1 Très instructif merci
0
frenzer Messages postés 521 Date d'inscription samedi 27 juin 2009 Statut Membre Dernière intervention 2 septembre 2012 168
24 août 2011 à 11:17
Je ne m'y connait pas trop en regex mais bon

Tu oubli d'échapper ton . par un \ et ensuite tu devrait rajouté un couple de parenthése pour les opérateur OU ce qui donnerait :

preg_match( '~(Mlle|Mr|Mme|M\.)(.+)<br />~', $email, $customer_last_name ));

Je n'ai pas tester..
0
merci je vais essayer
0