Problème Regex - PHP - simple quote
Apa
-
[Dal] Messages postés 6373 Statut Contributeur -
[Dal] Messages postés 6373 Statut Contributeur -
Bonjour,
J'ai besoin d'une expression régulière qui détecte des balises HTML, de type :
<balise class='toto' id='tata'> *élément(s) recherché(s)* </balise>
J'ai donc laissé en dure les balises HTML dans ma regex ; ce qui donne :
$regex = "#<balise class='toto' id='tata'>(.{0,})</balise>#";
Le problème c'est que regex n'a pas l'air d'aimer les simples quotes : '
Dés que j'en met, regex ne détecte plus rien, même en mes inhibant (au cas ou) \'
Avez vous une solution pour placer une simple quote dans une regex ?
Merci
J'ai besoin d'une expression régulière qui détecte des balises HTML, de type :
<balise class='toto' id='tata'> *élément(s) recherché(s)* </balise>
J'ai donc laissé en dure les balises HTML dans ma regex ; ce qui donne :
$regex = "#<balise class='toto' id='tata'>(.{0,})</balise>#";
Le problème c'est que regex n'a pas l'air d'aimer les simples quotes : '
Dés que j'en met, regex ne détecte plus rien, même en mes inhibant (au cas ou) \'
Avez vous une solution pour placer une simple quote dans une regex ?
Merci
A voir également:
- Problème Regex - PHP - simple quote
- 14 simple - Guide
- Simple pdf - Télécharger - PDF
- Easy php - Télécharger - Divers Web & Internet
- Simple ocr - Télécharger - Bureautique
- Simple file locker - Télécharger - Sécurité
3 réponses
<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 <
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
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").