Connexion
Pour récupérer votre compte, veuillez saisir votre adresse email. Vous allez recevoir un email contenant une adresse pour récupérer votre compte.
Inscription
En vous inscrivant, vous acceptez les conditions d'utilisation du site et de nous vendre votre âme pour un euro symbolique. Amusez vous, mais pliez vous à la charte.

Un Rédacteur Factornews vous demande :

Forums

1
Souci REGEXP
Morty
Membre Factor
Membre 668 msgs
Dans le genre truc imbitable au départ, je vous donne les REGEXP !

Ce que je cherche à faire c'est ça :

J'ai deux fichiers par semaine.
Magasin _ Stocks semaine 43_2007 - Entreprise SA.XLS
Magasin _ Stocks semaine 43_2007 - Entreprise SA.XLS

Je chercher à récupérer le numéro de la semaine et l'année (sachant que la semaine peut ne comporter qu'un chiffre).
Donc tentative en preg_match :
preg_match("^Magasin _ [Stocks|Ventes] semaine([[:digit:]]{1-2})_([[:digit:]]{4})",$nom_fichier, $out);

Et je suis bloqué là...

Merci d'avance !
 
Morty
Membre Factor
Membre 668 msgs
Vu que ça démarrait pas du tout je me suis aperçu que j'avais un peu planté la syntaxe :

$nom_fichier = "Magasin _ Stocks semaine 43_2007 - ENTREPRISE SA.XLS";
preg_match("`^Magasin _ [Stocks|Ventes] semaine ([[:digit:]]{1-2})_([[:digit:]]{4}) - ENTREPRISE SA.([a-zA-Z]{3}).$`", $nom_fichier, $out);
print_r($out);

Evidemment j'obtiens : Array ( )...
 
Narvaak
Membre Factor
Membre 125 msgs
Morty>

Un petit cadeau volà la rexexp

preg_match('#(.*?)([0-9]+)_([0-9]+)#', $file, $out);

le (.*?) c'est un jocker pour matcher le bloc qui se trouve avant numero_semaine et année

Ca ressort ça =>
Array
(
[0] => Magasin _ Stocks semaine 43_2007
[1] => Magasin _ Stocks semaine
[2] => 43
[3] => 2007
)

De rien.
 
Morty
Membre Factor
Membre 668 msgs
Merci beaucoup !

C'est vrai qu'en le faisant aussi simple ça paraît plus facile. Par contre, sais-tu pourquoi ça ne marchait pas avec le mien ?
 
Narvaak
Membre Factor
Membre 125 msgs
J'ai même trouvé plus simple où ça ne récupère que ce tu souhaites

preg_match('#([[:digit:]]+)_([[:digit:]]+)#', $nom_fichier, $out);

Array
(
[0] => 43_2007
[1] => 43
[2] => 2007
)

Pour l'histoire de l'erreur je ne vois pas trop.

Il vaut mieux essayer de matcher vraiment ce que tu veux récupérer. Plus les regexp sont longues plus y'a de chances qu'elles ne fonctionnent pas :(
 
Morty
Membre Factor
Membre 668 msgs
Okay, donc je vais pouvoir continuer à apprendre la syntaxe. En tout cas, ça m'a permis de démystifier un peu cet outil surpuissant...
 
Souci REGEXP
1

Règles à suivre

Écrire dans un français correct et lisible : ni phonétique, ni style SMS. Le warez et les incitations au piratage sont interdits. La pornographie est interdite. Le racisme et les incitations au racisme sont interdits. L'agressivité envers d'autres membres, les menaces, le dénigrement systématique sont interdits. Éviter les messages inutiles

 
Rechercher sur Factornews