Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1555 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  expressions régulières

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

expressions régulières

n°1895785
Yagmoth
Fanboy
Posté le 16-06-2009 à 16:13:09  profilanswer
 

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 :

 
Code :
  1. if(eregi("[:print:]+[:blank:]{1}\[:print:]{1}[:digit:]{5}[:print:]{1}",$location))
  2.       {
  3.       echo 'Bon format';
  4.       }
 

Merci d'avances  :jap:

Message cité 1 fois
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 !
mood
Publicité
Posté le 16-06-2009 à 16:13:09  profilanswer
 

n°1896373
deuspi
Posté le 17-06-2009 à 17:32:02  profilanswer
 

Yagmoth a écrit :

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 :
 

Code :
  1. if(eregi("[:print:]+[:blank:]{1}\[:print:]{1}[:digit:]{5}[:print:]{1}",$location))
  2.       {
  3.       echo 'Bon format';
  4.       }


 
Merci d'avances  :jap:


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 :
  1. $location = 'VAL-SUZON (21121)';
  2. if (preg_match('/[\w\-]+\s\([\d]{5}\)/', $location))
  3. {
  4.     echo 'Bon format';
  5. }


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

n°1896400
Profil sup​primé
Posté le 17-06-2009 à 19:07:18  answer
 

deuspi a écrit :


[...]
Moi j'utilise pas les ereg*, mais les preg_*
Je te donne donc ma solution avec une expression régulière type PCRE
[...]

+1, les regex de type PCRE sont plus rapides que les POSIX, je t'encourage donc à les utiliser Yagmoth.

n°1896491
Yagmoth
Fanboy
Posté le 18-06-2009 à 08:53:30  profilanswer
 

Merci beaucoup pour l'explication détaillée :jap:


---------------
L'ennemi est bête : il croit que c'est nous l'ennemi alors que c'est lui !
n°1896545
Yagmoth
Fanboy
Posté le 18-06-2009 à 11:03:11  profilanswer
 

Autre souci tant que j'y suis :o

 

Je récupère une liste de données de cette forme :

 
Code :
  1. href="http://www.blabla.com/">Nom du site
 

Seulement quand je tente ceci :

 
Code :
  1. preg_match('/"(.*)">/',$chaine,$resultat)
 

Ca continue à me renvoyer le même résultat, et de surcroit quand je tente un

 
Code :
  1. $pos=strpos('>',$chaine);
 

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

Message cité 1 fois
Message édité par Yagmoth le 18-06-2009 à 11:08:11

---------------
L'ennemi est bête : il croit que c'est nous l'ennemi alors que c'est lui !
n°1896554
deuspi
Posté le 18-06-2009 à 11:11:41  profilanswer
 

Yagmoth a écrit :

Autre souci tant que j'y suis :o
 
Je récupère une liste de données de cette forme :
 

Code :
  1. href="http://www.blabla.com/">Nom du site


 
Seulement quand je tente ceci :
 

Code :
  1. preg_match('/"(.*)">/',$chaine,$resultat)


 
Ca continue à me renvoyer le même résultat, et de surcroit quand je tente un  
 

Code :
  1. $pos=strpos('>',$chaine);


 
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


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.

n°1896557
Yagmoth
Fanboy
Posté le 18-06-2009 à 11:24:14  profilanswer
 

deuspi a écrit :


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.


 
Je file me cacher :D


---------------
L'ennemi est bête : il croit que c'est nous l'ennemi alors que c'est lui !
n°1896580
rufo
Pas me confondre avec Lycos!
Posté le 18-06-2009 à 13:13:45  profilanswer
 

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


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°1901147
stealth35
Posté le 01-07-2009 à 15:25:52  profilanswer
 

bonjour, j'ai un petit soucis avec les regexp, j'ai un texte genre ca  
 

Date: 28 juin 2007  
blabla
QUESTION  
question 1
fin question 1.
RÉPONSE  
réponse 1
finreponse1
Retour à l’index  
Date: 28 juin 2007  
QUESTION  
question 2
fin question 2.
RÉPONSE  
réponse 2
finreponse2
Retour à l’index


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


Message édité par stealth35 le 01-07-2009 à 15:26:10
n°1901198
grosbin
OR die;
Posté le 01-07-2009 à 16:42:42  profilanswer
 

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


---------------
Photos Panoramiques Montagnes Haute Savoie
mood
Publicité
Posté le 01-07-2009 à 16:42:42  profilanswer
 

n°1901207
stealth35
Posté le 01-07-2009 à 16:52:22  profilanswer
 

nickel, j'ai fait la 2eme methodes, c'est parfait


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  expressions régulières

 

Sujets relatifs
Php et expressions régulièresExpressions Règulières avec VS .Net 2003
Expressions régulières[javascript] Expressions régulières
expressions régulièresexpressions regulieres
Expressions régulières: récupérer les occurences vérfiant le patternExpressions régulières en php.
URL rewriting et expressions régulièresprobleme expressions regulieres php
Plus de sujets relatifs à : expressions régulières


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR