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 03/01/2007, 16h30   #1
Rédacteur/Modérateur
 
Avatar de Michaël
 
Michaël Todorovic
Ingénieur systèmes et réseaux
Inscription : juillet 2003
Messages : 3 493
Détails du profil
Informations personnelles :
Nom : Michaël Todorovic
Âge : 25
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux

Informations forums :
Inscription : juillet 2003
Messages : 3 493
Points : 5 899
Points : 5 899
Par défaut Prendre en compte les retours à la ligne

bonjour,
j'ai un texte
Code :
1
2
$text = "<balise>voici <u>mon</u>
joli texte</balise>
je voudrais extraire
Citation:
voici <u>mon</u>
joli texte
je fais
Code :
preg_match_all("/&lt;balise[^&gt;]*&gt;(.*)&lt;\/balise[^&gt;]*&gt;/", htmlspecialchars($text), $matches);
ce qui me récupère rien puisque mon retour à la ligne n'est pas pris en compte
quand je n'ai pas de retour à la ligne, ça me donne bien ce que je veux.
comment je peux faire pour lui faire prendre en compte ce retour à la ligne sachant qu'il peut y en avoir plusieurs et placés n'importe où entre les balises ?


Michaël est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2007, 16h53   #2
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
Et avec le petit s ?

Code :
"/&lt;balise[^&gt;]*&gt;(.*)&lt;\/balise[^&gt;]*&gt;/s"
Source : Les modificateurs
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2007, 16h57   #3
Membre expérimenté
 
Inscription : mai 2002
Messages : 673
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 673
Points : 532
Points : 532
Il me semble que le petit s est un caractère spécial à mettre dans l'expression, genre #[&gt;]*\s# et qu'il signifie tous les caracteres d'espacement (espace, tab, retour a la ligne)
gloubi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2007, 17h04   #4
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
Non non le modificateur doit être mis à la fin c'est à dire après le / ou #. Tout comme le U et i. Ce qui peut être mis à l'intérieur c'est ^ et $ et les autres directement avec la notation \s .

Mais dans notre cas, il vaut mieux le mettre à la fin vu que l'on ne sait pas où se trouve le retour à la ligne. Voir la source que j'ai donné avec
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2007, 17h36   #5
Membre expérimenté
 
Inscription : mai 2002
Messages : 673
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 673
Points : 532
Points : 532
Citation:
Envoyé par Kerod
Ce qui peut être mis à l'intérieur c'est ^ et $ et les autres directement avec la notation \s
C'est bien ce que je propose :

Citation:
#[&gt;]*\s#
Je n'ai l'habitude de ne l'utiliser que comme ça ! mais en effet, si il a le meme effet en tant que modificateur, autant en profiter :p
gloubi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2007, 18h33   #6
Rédacteur/Modérateur
 
Avatar de Michaël
 
Michaël Todorovic
Ingénieur systèmes et réseaux
Inscription : juillet 2003
Messages : 3 493
Détails du profil
Informations personnelles :
Nom : Michaël Todorovic
Âge : 25
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux

Informations forums :
Inscription : juillet 2003
Messages : 3 493
Points : 5 899
Points : 5 899
un problème disparait pour un autre je pensais pouvoir m'en sortir mais les regexp, c'est pas mon truc

dans un autre fichier j'ai
Code :
1
2
3
$text = "<balise>texte1
suite</balise>
<autreBalise>test</autreBalise><balise>texte2</balise>";
je n'arrive pas à créer une regexp qui récupère les texte entre toutes les balises "balise". ma regexp
Code :
$pattern = "#&lt;paragraph[^&gt;]*&gt;(.*)&lt;/paragraph[^&gt;]*&gt;#s";
me récupère tout entre les balises extrème, c'est à dire
Citation:
texte1
suite</balise>
<autreBalise>test</autreBalise><balise>texte2
le souci est que j'ai un nombre indéterminé à l'avance de "balise". je peux le trouver avec substr_count mais ça ne m'avance pas tant que ça ne prendra pas le contenu d'une balise seule

si vous avez une idée, je la prend parce que là je galère un peu
Michaël est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2007, 18h42   #7
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Il doit manquer le flag U ce coup-ci pour que les expressions telles que .+ et .* ne soient pas gourmandes (soit chercher la chaîne la plus courte au lieu de la plus longue).

De plus, utiliser une classe de caractères (même négative) pour signifier l'absence d'une chaîne (au sens plus d'un caractère) est une erreur : il faut utiliser les assertions pour cela (le tutoriel de Yogui est très bien fait sur ce point).


Julp.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2007, 19h23   #8
Rédacteur/Modérateur
 
Avatar de Michaël
 
Michaël Todorovic
Ingénieur systèmes et réseaux
Inscription : juillet 2003
Messages : 3 493
Détails du profil
Informations personnelles :
Nom : Michaël Todorovic
Âge : 25
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux

Informations forums :
Inscription : juillet 2003
Messages : 3 493
Points : 5 899
Points : 5 899
oui effectivement, c'était le U
problème résolu pour de bon, ça fait bien ce que je veux

à vous tous
Michaël 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 19h17.


 
 
 
 
Partenaires

Hébergement Web