expressions régulières - PHP - Programmation
Marsh Posté le 17-06-2009 à 17:32:02
| Yagmoth a écrit : Je sais, n-ième demande, mais je ne parviens toujours pas à les manipuler correctement  
   | 
 
Salut, 
 
Moi j'utilise pas les ereg*, mais les preg_* 
Je te donne donc ma solution avec une expression régulière type PCRE 
| Code : 
 | 
 
Pour la décomposer : 
Le / de début est de fin est le séparateur de l'expression régulière 
La zone entre crochets [] suivie d'un + indique que la zone peut se répéter 1 ou N fois 
La zone entre crochets [] suivie d'un chiffre entre accolades {5} indique que la zone se répète obligatoirement 5 fois 
Le \w signifie tous les caractères alphanumériques 
Le \d signifie tous les caractères numériques 
Le \s signifie tous les espaces (tabulations, ...) 
 
Ce qui nous donne : 
[\w\-]+          pour matcher tous les caractères alphanumériques ainsi que le tiret 
\s                  pour indiquer qu'on autorise 1 caractère d'espacement 
\(                  pour la parenthèse ouvrante 
[\d]{5}          pour matcher obligatoirement 5 caractères numériques 
\)                  pour la parenthèse fermante 
 
Cette expression n'est pas parfaite ; par exemple, elle va matcher la chaîne '---- (00000)' alors que ça ne convient sûrement pas à tes attentes. Mais bon j'ai bien détaillé le principe alors j'espère que ça te permettra d'avancer un peu. 
 
Bon courage
Marsh Posté le 17-06-2009 à 19:07:18
| deuspi a écrit :   | 
+1, les regex de type PCRE sont plus rapides que les POSIX, je t'encourage donc à les utiliser Yagmoth. 
Marsh Posté le 18-06-2009 à 08:53:30
Merci beaucoup pour l'explication détaillée  
 
Marsh Posté le 18-06-2009 à 11:03:11
Autre souci tant que j'y suis 
Je récupère une liste de données de cette forme :
| Code : 
 | 
Seulement quand je tente ceci :
| Code : 
 | 
Ca continue à me renvoyer le même résultat, et de surcroit quand je tente un
| Code : 
 | 
Ca ne fonctionne pas non plus, aucune valeur n'est renvoyée (et le fait que je remplace par le code html > ne change rien  )
)
Edit : trouvé, fallait faire un |"(.*)"|U
Marsh Posté le 18-06-2009 à 11:11:41
| Yagmoth a écrit : Autre souci tant que j'y suis  
   
   
   | 
 
Tant mieux que tu aies trouvé. Sinon, pour le strpos, tu t'es gourré d'ordre des paramètres  
 
Il faut faire strpos($chaine, '>') et non l'inverse.
Marsh Posté le 18-06-2009 à 11:24:14
| deuspi a écrit :   | 
 
 
Je file me cacher 
Marsh Posté le 18-06-2009 à 13:13:45
et avec ça : /[\w]{2,}\-[\w]{2,}\s\([\d]{5}\)/ 
 
Tiens, un bon site pour tester ta regexp sur un texte de ton choix : http://gskinner.com/RegExr/ 
 
C'est super pratique 
Marsh Posté le 01-07-2009 à 15:25:52
bonjour, j'ai un petit soucis avec les regexp, j'ai un texte genre ca  
 
| Date: 28 juin 2007   | 
 
je voudrais récupérer les info  (grace a preg_match_all): date, question, réponse 
sauf que bien sur ca marche pas, ca recupere uniquement la derniere entrée ( surment a cause des (.*)) 
 
ma pattern c'est  : /(Date: (\d* \w* \d*)\W+.*QUESTION(.*)RÉPONSE(.*)Retour à l’index)/ 
 
si quelqu'un a une idée, ou une autre methode que les regexp
Marsh Posté le 01-07-2009 à 16:42:42
le pb de  : QUESTION(.*)RÉPONSE(.*) est que le preg va choper la chaine la plus longue .. 
selon moi il faudrait remplacer ce que tu ne veux pas 
 str_ireplace(array("question","réponse","finreponse" ),"",$data) 
& enfin isoler les records (split("date:" ) 
 
ou inversement isoler les records entre eux (split("date:" )) puis faire ton preg_match
Marsh Posté le 16-06-2009 à 16:13:09
Je sais, n-ième demande, mais je ne parviens toujours pas à les manipuler correctement
J'essaie de vérifier si une expression ressemble à ça : VAL-SUZON (21121)
J'ai tenté ceci, mais visiblement ça ne marche pas :
Merci d'avances 
 
Message édité par Yagmoth le 16-06-2009 à 16:13:39
---------------
L'ennemi est bête : il croit que c'est nous l'ennemi alors que c'est lui !