Besoin d'aide pour une fonction PCRE

Eléphant du PHP | 59 Messages

20 avr. 2012, 11:37

Bonjour,


je récupère pour un script des nom de logiciels/plugins qui sont de la forme:

[Nom du logiciel] [version du logiciel]

Le nom du logiciel peut contenir n'importe quel caractère (et des espaces) mais commence toujours par une lettre

la version du logiciel commence toujours par un chiffre

Entre les deux il y a un espace.

Comment pourrais je extraire de ma variable le nom du logiciel et d'un autre coté sa version?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

20 avr. 2012, 21:12

salut,

Il faut mettre un \ devant le [ sinon tu ouvre une classe donc, par exemple, preg_match('/\[\w] \[\w]/i',$lachaine);

pas besoin de \ devant le ] car ils ne ferment pas une classe.

@+
Il en faut peu pour être heureux ......

ViPHP
ViPHP | 1380 Messages

20 avr. 2012, 22:28

Bonsoir,

Et il faut rajouter un quantificateur pour signaler au moteur regex combien de caractères il doit trouver. Deux motifs pourraient convenir:

Le premier, qui tombe sous le sens:

Code : Tout sélectionner

#\[[a-z].+\]\s\[[0-9].+\]#Ui

Code : Tout sélectionner

\[ crochet ouvrant [a-z].+ une lettre suivie de n'importe quel caractère (au moins un) \] crochet fermant \s une espace Même principe pour le deuxième groupe Options i pour insensible à la casse et U quantificateur non gourmand.
Et un second, plus optimisé. A peu près 33% plus rapide pour le même résultat:

Code : Tout sélectionner

#\[[a-z][^]]+\]\s\[[0-9][^]]+\]#i
Celui-ci utilise des classes négatives [^]]+ (tout caractère sauf ] ), plus véloces car sollicitant moins le moteur regex.

Ces deux motifs peuvent se tester ici:
http://lumadis.be/regex/test_regex.php?id=1147
ripat