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 22/04/2006, 14h27   #1
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
Par défaut Problème sur chaîne et regexp

Bonjour,

J'ai une chaine comme ceci par exemple
Citation:
[Challenge] titre
je souhaite uniquement récupérer le "titre" et donc je fais comme ceci
Code :
preg_match("#\[.*?\](.*?)#",$chaine1,$titre);
Mais ca passe pas...en tout cas ca m'affiche pas "titre".
Et pour finir quand je fais un echo de $titre[0] il m'affiche [Challenge]

Là je suis perdu pouvez vous m'éclairer ???
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2006, 14h41   #2
Rédacteur
 
Avatar de Swoög
 
Inscription : janvier 2003
Messages : 6 053
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : janvier 2003
Messages : 6 053
Points : 7 144
Points : 7 144
Envoyer un message via MSN à Swoög Envoyer un message via Skype™ à Swoög
essaie :
Code :
1
2
preg_match("#^\[.*?\](.*?)$#", $chaine, $match);
echo $match[1];
ou alors avec des .* au lieu des .*?
__________________
Rédacteur "éclectique" (XML, IRC, Web...)
Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
pensez à la balise [code] (bouton #) et au tag (en bas)
Swoög est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2006, 15h14   #3
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
Je l'ai sans le ? et ca fonctionne mais j'ai un nouveau problème...
Apparemment on peut mettre comme ceci aussi
Citation:
/Challenge/ titre
et donc je mets comme ceci :
Code :
preg_match("#^\[.*\](.*)|^\/.*\/(.*)#",$chaine,$titre)
et là il me donne plus rien
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2006, 15h17   #4
Rédacteur
 
Avatar de Swoög
 
Inscription : janvier 2003
Messages : 6 053
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : janvier 2003
Messages : 6 053
Points : 7 144
Points : 7 144
Envoyer un message via MSN à Swoög Envoyer un message via Skype™ à Swoög
l'opérateur d'alternative ( | ) est celui qui a la priorité la plus basse, donc il faut mettre des parenthèses, ou alors utiliser plutôt les classes de caractères :
Code :
1
2
preg_match("#^[[/].*[]/](.*)$#", $chaine, $match);
echo $match[1];
ou
Code :
1
2
preg_match("#^(\[.*\]|/.*/)(.*)$#", $chaine, $match);
echo $match[2];
perso je préfère la première solution
__________________
Rédacteur "éclectique" (XML, IRC, Web...)
Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
pensez à la balise [code] (bouton #) et au tag (en bas)
Swoög est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2006, 15h31   #5
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
c'est nickel...j'ai mis la première solution comme tu me l'as conseillé.

Mais peux m'expliquer pourquoi ? avec tout ces [ je suis perdu
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2006, 15h49   #6
Rédacteur
 
Avatar de Swoög
 
Inscription : janvier 2003
Messages : 6 053
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : janvier 2003
Messages : 6 053
Points : 7 144
Points : 7 144
Envoyer un message via MSN à Swoög Envoyer un message via Skype™ à Swoög
alors, c'est vrai que les regexp peuvent être un peu déroutantes

Bon, juste au cas où, un petit rappel sur les classes de caractères dans les regexp

les classes de caractères permettent d'autoriser un ensemble de caractère càd que le pattern #^[abc]$# matchera s'il est appliqué à l'une des trois chaînes : "a", "b" ou "c" de plus #^[abc]+$# matchera s'il est appliqué à une chaîne composée uniquement de a, b et c contrairement à #^(a+|b+|c+)$# qui matchera des chaînes qui ne seront que soit une suite de a, soit une suite de b, soit une suite de c, j'espère que tu as bien compris la différence

A noter : tous les meta-caractères autres que ] perdent leur signification (sauf cas particulier que je vais indiquer plus loin )

ensuite, pour les classes de caractères il existe quatre syntaxes particulières, la première qui permet de spécifier un interval :
[a-z] permet de valider n'importe quelle lettre minuscule
[0-9A-Za-z] permet de valider un chiffre héxadécimal,
on peut aussi faire un mix :
[A-Z02468a-z] toutes les lettres et les chiffres paires

etc...

de ce fait, il est impossible de spécifier un - dans une classe de caractères, sauf (syntaxe spéciale n°2) s'il est spécifié en dernier, càd :
[a-zA-Z0-9-] permet de spécifier toutes les lettres, tous les chiffres et le tiret.

la troisième syntaxe, permet de spécifier un ] dans la classe, les classes vides sont refusées donc []a] valide un "a" ou un "]"

la quatrième est une classe de négation, c'est à dire que ça valide tous les caractères qui ne sont pas indiqués dans la classe, par exemple :
[^a-zA-Z] validera tout ce qui n'est pas une lettre

j'espère que tu as bien compris ceci, c'est peut être un peu fouilli, tu peux consulter la doc officielle de PCRE là : http://fr.php.net/pcre (et pages suivantes)

pour en revenir à notre pattern :
#^[[/].*[]/](.*)$#


#^ <= bon pas besoin de moi là début du pattern et demande du début de la chaîne

[[/] <= classe de caractère composée de [ et / c'est à dire qu'on veut un [ ou un /

.* <= pas besoin de moi ^^

[] <= pas de classe vide, donc on ajoute ] et on continue
[]/] <= donc classe avec ] et /

(.*)$# <= la fin du pattern

donc en fait, si tu as bien suivi, tu remarqueras que le pattern valide aussi des trucs de la forme "[Chapitre/ Titre" ou "/Chapitre] Titre"

[Ce que ne fait pas le second pattern ]

J'espère que c'est suffisament clair
__________________
Rédacteur "éclectique" (XML, IRC, Web...)
Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
pensez à la balise [code] (bouton #) et au tag (en bas)
Swoög est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2006, 16h01   #7
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
Oui là c'est plus clair pour moi. Et je te remercie pour ce petit cours
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2006, 16h05   #8
Rédacteur
 
Avatar de Swoög
 
Inscription : janvier 2003
Messages : 6 053
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : janvier 2003
Messages : 6 053
Points : 7 144
Points : 7 144
Envoyer un message via MSN à Swoög Envoyer un message via Skype™ à Swoög
Je t'en prie j'ai eu du mal avec les regexp au début aussi
__________________
Rédacteur "éclectique" (XML, IRC, Web...)
Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
pensez à la balise [code] (bouton #) et au tag (en bas)
Swoög 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 10h56.


 
 
 
 
Partenaires

Hébergement Web