Problème Regex - PHP - simple quote
Fermé
Apa
-
13 août 2012 à 11:19
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 13 août 2012 à 12:56
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 13 août 2012 à 12:56
A voir également:
- Problème Regex - PHP - simple quote
- Iphone 14 simple - Guide
- Simple ocr - Télécharger - Bureautique
- Easy php - Télécharger - Divers Web & Internet
- Simple file locker - Télécharger - Sécurité
- Iphone 13 simple - Guide
3 réponses
Guillaume Ki
Messages postés
8
Date d'inscription
lundi 13 août 2012
Statut
Membre
Dernière intervention
13 août 2012
13 août 2012 à 11:46
13 août 2012 à 11:46
<balise class='toto' id='tata'> ([^<]+) </balise>
les ' simple quote ne change rien. ^^
[^<]+ équivaut à: accepte tous sauf '<'
en le faisant suivre de < comme ca ([^<]+) < équivaut à prendre tout jusqu'au <
les ' simple quote ne change rien. ^^
[^<]+ équivaut à: accepte tous sauf '<'
en le faisant suivre de < comme ca ([^<]+) < équivaut à prendre tout jusqu'au <
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié par [Dal] le 13/08/2012 à 12:01
Modifié par [Dal] le 13/08/2012 à 12:01
Guillaume Ki-: Il faudrait supprimer les espaces que tu as mis de part et d'autre des parenthèses, car ils supposent qu'il existent dans le contenu.
Apa: ton expression est bonne également. J'aurai écrit plus simplement (.*), mais peu importe.
Cela dit, elle ne va fonctionner que si le contenu est sur une seule ligne.
Pour matcher sur plusieurs lignes, ajoute le modificateur 's', qui traitera les différentes lignes comme s'il s'agissait d'une seule :
$regex = "#<balise class='toto' id='tata'>(.{0,})</balise>#s";
S'il y a plusieurs tags à matcher, tu peux aussi ajouter le modificateur 'g'.
Enfin, si ce que tu veux c'est supprimer les tags html, il y a une fonction php pour cela (qui a ses limites, cf. la doc) : https://www.php.net/manual/en/function.strip-tags.php
Elle est paramétrable sur les tags concernés.
Dal
Apa: ton expression est bonne également. J'aurai écrit plus simplement (.*), mais peu importe.
Cela dit, elle ne va fonctionner que si le contenu est sur une seule ligne.
Pour matcher sur plusieurs lignes, ajoute le modificateur 's', qui traitera les différentes lignes comme s'il s'agissait d'une seule :
$regex = "#<balise class='toto' id='tata'>(.{0,})</balise>#s";
S'il y a plusieurs tags à matcher, tu peux aussi ajouter le modificateur 'g'.
Enfin, si ce que tu veux c'est supprimer les tags html, il y a une fonction php pour cela (qui a ses limites, cf. la doc) : https://www.php.net/manual/en/function.strip-tags.php
Elle est paramétrable sur les tags concernés.
Dal
Guillaume Ki
Messages postés
8
Date d'inscription
lundi 13 août 2012
Statut
Membre
Dernière intervention
13 août 2012
13 août 2012 à 12:20
13 août 2012 à 12:20
En l'occurrence les espaces sont de part et d'autres de l'exemple:
"<balise class='toto' id='tata'> *élément(s) recherché(s)* </balise>"
Oops je joue l'idiot o.O
"J'aurai écrit plus simplement (.*), mais peu importe. "
Je suis pas exactement d'accord. Je dirais théoriquement oui vu que PCRE contrairement à POSIX cherche à retourner la réponse la plus courte mais il m'est arrivé un bon paquet de fois que ça ne le fasse pas aussi j'ai été content de découvrir l'exclusion. Il comprend mieux quand tu lui dis clairement j'en veux pas.
Du coup pour moi ca donne:
$regex = "#<balise class='toto' id='tata'>([^<]+)</balise>#s";
Mais ca m'étonnerait que tu aies plusieurs balises avec le même id ("tata").
"<balise class='toto' id='tata'> *élément(s) recherché(s)* </balise>"
Oops je joue l'idiot o.O
"J'aurai écrit plus simplement (.*), mais peu importe. "
Je suis pas exactement d'accord. Je dirais théoriquement oui vu que PCRE contrairement à POSIX cherche à retourner la réponse la plus courte mais il m'est arrivé un bon paquet de fois que ça ne le fasse pas aussi j'ai été content de découvrir l'exclusion. Il comprend mieux quand tu lui dis clairement j'en veux pas.
Du coup pour moi ca donne:
$regex = "#<balise class='toto' id='tata'>([^<]+)</balise>#s";
Mais ca m'étonnerait que tu aies plusieurs balises avec le même id ("tata").
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
13 août 2012 à 12:56
13 août 2012 à 12:56
Cela parait être un bon moyen d'écrire une expression plus portable. Peut-être est-elle aussi plus rapide :-)
J'aurai aussi proposé ([^<]*), pour matcher le cas où la balise existe, mais ne contient rien.
J'aurai aussi proposé ([^<]*), pour matcher le cas où la balise existe, mais ne contient rien.