Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Olivier Miakinen
Bonjour,
Le 03/11/2013 08:33, Julien Arlandis a écrit :
Pour Nemo j'ai besoin d'un regex capable de repérer tout contenu entre deux balises bbcodes quelconques.
Note qu'il existe un groupe de discussion spécialement consacré aux expressions rationnelles : fr.comp.lang.regexp. J'y fais suivre la discussion.
Par exemple, je cherche à isoler [X] Y [/X], avec X qui n'est pas connu à l'avance.
Quelqu'un a une idée comment faire ?
J'ai écrit ceci :
/([tex])([sS]*?)([/tex])/ig;
qui ne fonctionne que pour les balises [tex], comment généraliser ?
En utilisant une référence arrière.
Je n'ai pas l'impression que les parenthèses que tu as mises te servent, alors je les retire pour simplifier les explications, tu pourras les rajouter après si tu en as besoin :
/[tex][sS]*?[/tex]/ig
Maintenant rajoutons les parenthèses dont on a besoin pour la référence arrière, celles autour du premier « tex » :
/[(tex)][sS]*?[/tex]/ig
Ceci étant fait, on peut remplacer le second « tex » par « 1 » qui est le contenu de la première paire de parenthèses rencontrée dans la regexp :
/[(tex)][sS]*?[/1]/ig
Et maintenant tu peux remplacer le premier « tex » par une regexp variable, ce qui devrait donner ce que tu veux. Exemple avec « tex », « b », « i » et « url » :
/[(tex|b|i|url)][sS]*?[/1]/ig
Bien sûr, tu peux même accepter une séquence quelconque de lettres, par exemple :
/[([a-z]+)][sS]*?[/1]/ig
Note : à priori, je crois que ton flag /i global fera que la casse peut être différente entre la balise ouvrante et la balise fermante, par exemple [tEx] et [/Tex], mais cela reste à vérifier.
Note 2 : si tu veux rajouter tes parenthèses du début, alors il faudra penser à renuméroter les références. Ici, en l'occurrence, 1 deviendra 2 :
/([([a-z]+)])([sS]*?)([/2])/ig
Note 3 : je n'ai rien testé, par manque de temps. Aussi j'ai pu laisser une coquille. Reviens nous le dire si ça ne fonctionne pas (et si tu ne t'en sors pas tout seul).
Cordialement, -- Olivier Miakinen
Bonjour,
Le 03/11/2013 08:33, Julien Arlandis a écrit :
Pour Nemo j'ai besoin d'un regex capable de repérer tout contenu entre deux
balises bbcodes quelconques.
Note qu'il existe un groupe de discussion spécialement consacré aux
expressions rationnelles : fr.comp.lang.regexp. J'y fais suivre la
discussion.
Par exemple, je cherche à isoler [X] Y [/X], avec X qui n'est pas connu à
l'avance.
Quelqu'un a une idée comment faire ?
J'ai écrit ceci :
/([tex])([sS]*?)([/tex])/ig;
qui ne fonctionne que pour les balises [tex], comment généraliser ?
En utilisant une référence arrière.
Je n'ai pas l'impression que les parenthèses que tu as mises te
servent, alors je les retire pour simplifier les explications, tu
pourras les rajouter après si tu en as besoin :
/[tex][sS]*?[/tex]/ig
Maintenant rajoutons les parenthèses dont on a besoin pour la
référence arrière, celles autour du premier « tex » :
/[(tex)][sS]*?[/tex]/ig
Ceci étant fait, on peut remplacer le second « tex » par « 1 »
qui est le contenu de la première paire de parenthèses rencontrée
dans la regexp :
/[(tex)][sS]*?[/1]/ig
Et maintenant tu peux remplacer le premier « tex » par une regexp
variable, ce qui devrait donner ce que tu veux. Exemple avec « tex »,
« b », « i » et « url » :
/[(tex|b|i|url)][sS]*?[/1]/ig
Bien sûr, tu peux même accepter une séquence quelconque de lettres,
par exemple :
/[([a-z]+)][sS]*?[/1]/ig
Note : à priori, je crois que ton flag /i global fera que la casse
peut être différente entre la balise ouvrante et la balise fermante,
par exemple [tEx] et [/Tex], mais cela reste à vérifier.
Note 2 : si tu veux rajouter tes parenthèses du début, alors il
faudra penser à renuméroter les références. Ici, en l'occurrence,
1 deviendra 2 :
/([([a-z]+)])([sS]*?)([/2])/ig
Note 3 : je n'ai rien testé, par manque de temps. Aussi j'ai pu
laisser une coquille. Reviens nous le dire si ça ne fonctionne
pas (et si tu ne t'en sors pas tout seul).
Pour Nemo j'ai besoin d'un regex capable de repérer tout contenu entre deux balises bbcodes quelconques.
Note qu'il existe un groupe de discussion spécialement consacré aux expressions rationnelles : fr.comp.lang.regexp. J'y fais suivre la discussion.
Par exemple, je cherche à isoler [X] Y [/X], avec X qui n'est pas connu à l'avance.
Quelqu'un a une idée comment faire ?
J'ai écrit ceci :
/([tex])([sS]*?)([/tex])/ig;
qui ne fonctionne que pour les balises [tex], comment généraliser ?
En utilisant une référence arrière.
Je n'ai pas l'impression que les parenthèses que tu as mises te servent, alors je les retire pour simplifier les explications, tu pourras les rajouter après si tu en as besoin :
/[tex][sS]*?[/tex]/ig
Maintenant rajoutons les parenthèses dont on a besoin pour la référence arrière, celles autour du premier « tex » :
/[(tex)][sS]*?[/tex]/ig
Ceci étant fait, on peut remplacer le second « tex » par « 1 » qui est le contenu de la première paire de parenthèses rencontrée dans la regexp :
/[(tex)][sS]*?[/1]/ig
Et maintenant tu peux remplacer le premier « tex » par une regexp variable, ce qui devrait donner ce que tu veux. Exemple avec « tex », « b », « i » et « url » :
/[(tex|b|i|url)][sS]*?[/1]/ig
Bien sûr, tu peux même accepter une séquence quelconque de lettres, par exemple :
/[([a-z]+)][sS]*?[/1]/ig
Note : à priori, je crois que ton flag /i global fera que la casse peut être différente entre la balise ouvrante et la balise fermante, par exemple [tEx] et [/Tex], mais cela reste à vérifier.
Note 2 : si tu veux rajouter tes parenthèses du début, alors il faudra penser à renuméroter les références. Ici, en l'occurrence, 1 deviendra 2 :
/([([a-z]+)])([sS]*?)([/2])/ig
Note 3 : je n'ai rien testé, par manque de temps. Aussi j'ai pu laisser une coquille. Reviens nous le dire si ça ne fonctionne pas (et si tu ne t'en sors pas tout seul).