2 votes

Regex obtenir le prénom de "Aardal, Prof.dr.ir. K.I. (Karen)"

Quelqu'un peut-il m'aider à écrire une regex pour filtrer le nom entre parenthèses dans une chaîne comme celle-ci : Aardal, Prof.dr.ir. K.I. (Karen)

J'ai essayé

preg_match('~[^/]([^/])~', $fullname, $matches);
var_dump($matches);

Mais le retour est

array
  0 => string 'Aa' (length=2)
  1 => string 'a' (length=1)

Merci les gars !

6voto

Julian Points 972
  1. vous pouvez sauter n'importe quel caractère sauf le (
  2. alors le match ( et tout autre caractère que )
  3. alors le match )
  4. entre ( y ) est maintenant le groupe de capture "nom".

Regex :

[^\(]*\((?<name>[^\)]+)\)

Testé avec l'outil Expresso . Cette regex correspond à deux groupes :

  1. Toute la chaîne : "Aardal, Prof.dr.ir. K.I. (Karen)"
  2. Le groupe nommé 'nom' : 'Karen'.

Notes :

  • (?<name>...) est le groupe nommé
  • Pour correspondre à la ( etc., nous devons l'échapper avec une barre oblique.

0voto

splash Points 8499

Certaines fonctions de chaîne standard le feraient aussi :

function extractName($subject)
{
    $openIndex = strpos($subject, '(');
    if ($openIndex !== false)
    {
        $closeIndex = strpos(substr($subject, $openIndex + 1), ')');
        if ($closeIndex !== false)
            return substr($subject, $openIndex + 1, $closeIndex);
    }
    else
        return '';
}

echo extractName('Aardal, Prof.dr.ir. K.I. (Karen)');

0voto

HMP Points 31

Essayez d'en suivre un

.*\((.*)\)

Puis saisissez la valeur du premier groupe, qui correspondra à ce qui suit :

Aardal, Prof.dr.ir. K.I. ( Karen )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X