[RESOLU] PHP, regex et chaine récurrente !

Eléphanteau du PHP | 10 Messages

27 juin 2012, 22:10

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 !

ViPHP
xTG
ViPHP | 7331 Messages

27 juin 2012, 22:34

Regarde du côté de preg_match_all() plutôt. ;)

Eléphanteau du PHP | 10 Messages

27 juin 2012, 22:43

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 ) )

ViPHP
ViPHP | 2577 Messages

28 juin 2012, 16:00

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.

Eléphanteau du PHP | 10 Messages

29 juin 2012, 23:21

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é ! :)

Eléphanteau du PHP | 10 Messages

29 juin 2012, 23:25

Comment changer le nom du topic en résolu svp ?

Petit nouveau ! | 7 Messages

01 juil. 2012, 13:53

Même question : Comment dire qu'un sujet est résolu ?