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 !