[PHP] Expression reguliere

galio -  
frenzer Messages postés 546 Statut Membre -
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

2 réponses

  1. Groarh Messages postés 706 Statut Membre 185
     
    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
    1. frenzer Messages postés 546 Statut Membre 168
       
      +1 Très instructif merci
      0
  2. frenzer Messages postés 546 Statut Membre 168
     
    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
    1. galio
       
      merci je vais essayer
      0