Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/06/2006, 13h06   #1
Membre chevronné
 
Avatar de Death83
 
Inscription : mars 2005
Messages : 1 667
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 667
Points : 746
Points : 746
Par défaut Aide pour une REGEX

Salut a tous,

j'ai besoin d'aide pour une regex.

En faites j'ai une chaine de caractère dans laquelle je veut tester la présences de plusieurs motclé (le nombre est variable, je les stock dans un tableaux).

Je veut donc faire un preg_match sur cette ligne en testant si CHACUN des motclès est bien présents. Jusque la c'est facile, le seul problème c'est comment faire pour dire que l'ordre d'apparition du mot n'a pas d'importance?

En gros je veut faire comme les LIKE %motcle% de SQL.

Vous avez des idées?
__________________
manganimes (en construction) -
zemanga
Death83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2006, 13h55   #2
Membre habitué
 
Avatar de gd_dev
 
Homme Giuseppe Damiani
Développeur Web
Inscription : décembre 2003
Messages : 76
Détails du profil
Informations personnelles :
Nom : Homme Giuseppe Damiani
Âge : 39
Localisation : Suisse

Informations professionnelles :
Activité : Développeur Web
Secteur : Service public

Informations forums :
Inscription : décembre 2003
Messages : 76
Points : 109
Points : 109
preg_match('/mot01|mot02|mot03|mot04/g', $text);
gd_dev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2006, 14h02   #3
Membre chevronné
 
Avatar de Death83
 
Inscription : mars 2005
Messages : 1 667
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 667
Points : 746
Points : 746
a oki merci, mais ca ne fera pas exactement ce que je veut. Car je veut que chaque mot soit présent.

Par exemple j'ai une chaine de caractère dans laquelle je veut savoir si il ya mot1, mot2 et mot 3.

Il doit donc me renvoyer true pour les motif suivant:

mot1 blabla mot2 bla bla mot3
mot2 blabla mot1 bla bla mot3
mot3 blabla mot2 bla bla mot1
...

Avec cette methode il me renvera true si j'ai ce motif:

mot1 blabla mot1 bla bla mot1

alors que je ne le souhaite pas.
__________________
manganimes (en construction) -
zemanga
Death83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2006, 14h23   #4
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
Citation:
Envoyé par gd_dev
preg_match('/mot01|mot02|mot03|mot04/g', $text);
Je ne connais pas l'option "g", a quoi ca correspond ?

php.net ne connait pas non plus d'ailleurs.

Pour ton probleme Death83, a part la methode :

Code :
1
2
3
if (preg_match('/mot1/', $texte) && preg_match('/mot2/', $texte) && preg_match('/mot3/', $texte)...) {
...
}
Je vois pas comment tu peux faire ca avec une seule regexp...

Tu peux faire un OU avec :

faire un ET avec :

mais difficilement mixer les 2... ou alors tu construit toutes les permutations avant en php et tu balance un truc horrible du genre

Code :
'/(mot2.*mot1|mot1.*mot2)/'
(j'ai réduit l'exemple a 2 mots, parce que ca devient lourd meme avec 3 ;o)
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2006, 14h41   #5
Membre habitué
 
Avatar de gd_dev
 
Homme Giuseppe Damiani
Développeur Web
Inscription : décembre 2003
Messages : 76
Détails du profil
Informations personnelles :
Nom : Homme Giuseppe Damiani
Âge : 39
Localisation : Suisse

Informations professionnelles :
Activité : Développeur Web
Secteur : Service public

Informations forums :
Inscription : décembre 2003
Messages : 76
Points : 109
Points : 109
Par défaut Vous avez vu juste Fladnag

En effet, l'option /g n'est pas valide en PHP. Les vielles abitude de Perl.

Pour info, cette option permet de ne pas arrêter la recherche quand l'expression trouve une réponse. On peu ainsi compté combien de foix le mot existe.

Plus d'info : http://www.anaesthetist.com/mnm/perl/regex.htm

Si non, pour le problème de Death83 je pense que Fladnag a donné toutes les réponses possibles.

Salutation
gd_dev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2006, 14h58   #6
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
ok, je comprends mieux ;o)

en fait, j'en ai peut etre oublié une qui me vient maintenant que tu parles de la signification de l'option g en perl

Tu pourrais faire un "ou" (mot1|mot2|mot3) avec un preg_match_all

puis recuperer la liste des resultats, dédoublonner le tableau avec array_unique et faire un array_diff pour verifier que tout les mots sont bien présents par rapport a un tableau des mots recherchés (array('mot1', 'mot2', 'mot3'))
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2006, 15h50   #7
Membre chevronné
 
Avatar de Death83
 
Inscription : mars 2005
Messages : 1 667
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 667
Points : 746
Points : 746
Merci j'ai opter pour la méthode avec plusieurs regex apres je regarde si une d'entre elle est false pour savoir si la chaine est correcte ou pas.

Merci
__________________
manganimes (en construction) -
zemanga
Death83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h58.


 
 
 
 
Partenaires

Hébergement Web