Page 1 sur 1

PHP, regex et chaine récurrente !

Posté : 27 juin 2012, 22:10
par kervanec
Bonjour !
En désespoir de cause, je me tourne vers des pros pour m'aider.

J'ai une chaîne du type : ./datas/XX_TRUCMUCHE/XX.TADADADA/XX._ETENCORE/DESMOTS/XX._PWET/XX_TADA etc.
C'est un exemple, en fait un script examine le contenu d'une architecture dossier et retourne une chaîne de ce type.
Avec : XX = un ou plusieurs chiffres (2 max); les caractères ".", "_" ou espace présents ensemble ou séparément.

Mon but est de ne retenir de cette chaîne que les chiffres/nombres qui sont entre "/" et "._ "
Comme je suis pas du tout un expert en regex, j'avais essayé de bidouiller un truc de ce type :

Code : Tout sélectionner

$chaine="./datas/1_TRUCMUCHE/23.TADADADA/5._ETENCORE/DESMOTS/85._PWET/19_TADA"; $pregchaine=preg_replace('#(.*(\d){1,2}[\/._ ].*)+#i', '$2', $chaine); echo $pregchaine;
Mais j'ai deux problèmes avec cette regex.
1 : elle ne me retourne que la dernière occurrence de sa recherche (ici, "9"), alors qu'il me faudrait tous les chiffres en une chaîne.
2 : si j'ai des chiffres dans le texte, elle les prends aussi en compte, ce qu'il ne faut pas (ce pourquoi je n'ai pas simplement spécifié #\D# dans mon remplace, trop simple sinon

PS : j'ai aussi essayé avec un preg_match_all, et ça me donne ça :

Code : Tout sélectionner

Array ( [0] => Array ( [0] => ./datas/1_TRUCMUCHE/23.TADADADA/5._ETENCORE/DESMOTS/85._PWET/19_TADA ) [1] => Array ( [0] => ./datas/1_TRUCMUCHE/23.TADADADA/5._ETENCORE/DESMOTS/85._PWET/19_TADA ) [2] => Array ( [0] => 9 ) )
Merci de votre aide potentielle !

Re: PHP, regex et chaine récurrente !

Posté : 27 juin 2012, 22:34
par xTG
Regarde du côté de preg_match_all() plutôt. ;)

Re: PHP, regex et chaine récurrente !

Posté : 27 juin 2012, 22:43
par kervanec
Confère la fin de ma contribution :)

Mon masque ne doit pas être correct, car preg_match_all me retourne :

Code : Tout sélectionner

Array ( [0] => Array ( [0] => ./datas/1_TRUCMUCHE/23.TADADADA/5._ETENCORE/DESMOTS/85._PWET/19_TADA ) [1] => Array ( [0] => ./datas/1_TRUCMUCHE/23.TADADADA/5._ETENCORE/DESMOTS/85._PWET/19_TADA ) [2] => Array ( [0] => 9 ) )

Re: PHP, regex et chaine récurrente !

Posté : 28 juin 2012, 16:00
par Mazarini
je serais tenté de faire un explode sur le caractère :
de vérifier array de 2 éléments
de contrôler le premier élément de 0 à 23 et le second de 0 à 59.

Re: PHP, regex et chaine récurrente !

Posté : 29 juin 2012, 23:21
par kervanec
Ah bien non, les valeurs numériques sont variables, susceptibles de changer quand on navigue dans l'arborescence, donc je peux pas faire un truc figé.

Par contre, on m'a indiqué ça :

Code : Tout sélectionner

preg_match_all('#/([0-9]{1,2})[._-\s]+#i', '', $chaine,$matches);
et ça fonctionne bien. Je cherchais trop compliqué ! :)

Re: PHP, regex et chaine récurrente !

Posté : 29 juin 2012, 23:25
par kervanec
Comment changer le nom du topic en résolu svp ?

Re: PHP, regex et chaine récurrente !

Posté : 01 juil. 2012, 13:53
par JABch
Même question : Comment dire qu'un sujet est résolu ?