|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : février 2008 Messages : 18 ![]() |
J'ai par exemple :
<strong><strong>mot1</strong>mot2</strong> Je souhaite écrire une expression régulière qui va rechercher 2 <strong> où entre les 2 il n'y a pas de </strong> afin d'en supprimer un. Même chose pour 2 </strong> où entre les 2 il n'y a pas de <strong> Mais je ne sais pas comment lui dire trouve moi la chaine qui contient <strong>(.*)[pas la chaîne "</strong>"](.*)<strong> Merci d'avance pour votre aide. |
|
|
00
|
|
|
#2 |
|
Invité de passage
![]() Inscription : février 2008 Messages : 18 ![]() |
C'est possible de rechercher une chaine avec des expressions régulières qui contient un mot, n'en contient pas un autre, et en contient un 3e ?
Je veux récupérer une chaine qui contient <strong> ... <strong> mais entre les 2 je veux être sûr qu'il n'y ait pas de </strong> |
|
|
00
|
|
|
#3 | ||
|
Membre chevronné
![]() Développeur Web Inscription : mars 2005 Messages : 773 ![]() |
Ca dépend des spécifications exactes du problème.
Dans le cas (simple) que tu cites, c'est possible en utilisant les références arrière : Code :
En particulier, le motif ci-dessus n'intercepte que des balises sans attributs (la balise fermante a le même contenu que la balise ouvrant + un slash initial) et doit donc être affiné en fonction des besoins. En creusant un peu, on devrait facilement trouver d'autres soucis, par exemple, le motif ne traite pas bien : Code :
$str = "<strong><strong>mot1</strong>mot2<strong>aaaaa</strong></strong>"; |
||
|
|
00
|
|
|
#4 | ||
|
Invité de passage
![]() Inscription : février 2008 Messages : 18 ![]() |
Merci pour la réponse.
Effectivement, ça fonctionne pour le cas simple (avec un seul type de balise), mais dans une boucle. Code :
J'ai étudié le code proposé, j'ai compris ce qui a été fait sauf : que signifient ces parenthèses ? |
||
|
|
00
|
|
|
#5 | ||
|
Membre chevronné
![]() Développeur Web Inscription : mars 2005 Messages : 773 ![]() |
Oui, la recherche (.*) finale du motif empêche qu'il soit traité plusieurs fois. Pour éviter la boucle (et la gourmandise de l'opérateur *), une variante "améliorée" pour les cas toujours assez simples serait du genre :
Code :
\1 récupère le texte satisfaisant la première parenthèse capturante (anti-slash doublé puisque c'est un caractère de contrôle : il faut de dé-spécialiser) : il récupère donc la première occurrence du mot capturé par la première paire de parenthèses. Idem pour \5 en transposant. Note que ça ne marche toujours que dans les cas simples de chaînes évoqués plus haut : une chaîne correcte comme Code :
<strong>mot1</strong>aaaaaaaaaa<strong>mot2</strong> |
||
|
|
00
|
|
|
#6 | ||||
|
Invité de passage
![]() Inscription : février 2008 Messages : 18 ![]() |
Elle ne sera pas bien traitée car elle n'a pas besoin d'être traitée, non ?
Sinon, j'ai une autre question : Si j'ai : Code :
Code :
C'est possible de faire ça, de récupérer tous les chiffres entre 2 balises ? => 11223344 sachant que le groupe de lettres et de chiffres peut être variable |
||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com