Mon but est de détecter la présence du tag [EXEMPLE], afin de le remplacer s'il existe, sinon je l'ajoute. Mon problème est qu'il m'est impossible de trouver le texte a cause des retours chariots. Voici l'expression que j'utilise.
/\[EXEMPLE](.*\)\[\/EXEMPLE]/
Je pourrais me dire que je suis seulement pas doué pour les regexp, mais celle-ci marche parfaitement en PHP...
Si je mets tout le texte sur une seule ligne, ca marche aussi. Quelqu'un à une idée?
@+ Ordinastie
PS: le texte est le contenu d'un textarea si ca change quelque chose...
Ordinastie
Messages postés93Date d'inscriptionsamedi 29 janvier 2005StatutMembreDernière intervention17 octobre 20082 25 oct. 2006 à 09:57
Bonjour,
Merci pour la réponse... mais non :)
.* est ce qu'on appelle "greedy" (pas cherché de traduction), ce qui signifie qu'il prendra le plus large possible.
Par exemple, si mon texte est:
[EXEMPLE]
ex 1
ex 2
/EXEMPLE ex 3
/EXEMPLE ex 4
Le texte trouvé sera:
[EXEMPLE]
ex 1
ex 2
/EXEMPLE ex 3
/EXEMPLE
Il est possible de limiter la réponse à la premiere occurrence trouvée avec le ? je crois.
Le problème est bien causé par les retours chariots car si je mets mon texte sur une seule ligne, je récupère bien ce qu'il faut.
J'ai fini par trouvé l'expression qu'il me fallait:
/\[EXEMPLE](?:\s)*([\w\s,.:-\\\/]*)(?:\s)*\[\/EXEMPLE]/im
Pour ceux qui souhaiteraient une explication:
Je cherche [EXEMPLE]
Suivi de 0, 1 ou plusieurs \s (retours chariots, blancs etc.), dont je ne veux pas retenir la référence (grace à ?:)
Suivi d'un nombre indeterminé de mots, espaces, virgules, points, deux-points, slash/antislash, tirets, dont je garde la référence
Suivi de 0, 1 ou plusieurs \s (retours chariots, blancs etc.), dont je ne veux pas retenir la référence (grace à ?:)
Et enfin qui fini par /EXEMPLE Le tout, multiligne et insensible à la casse.
J'aurai préférer faire une classe "tout + \s" mais j'arrivai pas et je dois avouer, ca commencait à me saouler.
Voila, en tout cas, merci encore pour la réponse
@+ Ordinastie
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 25 oct. 2006 à 07:55
Bonjour,
ce n'est pas du aux retours chariots
.* c'est tous les caractères, et ça ne s'arrête pas à /EXEMPLE pas très au fait non plus des expressions régulières
je ferais ça en "plusieurs étapes".
<script type="text/javascript">
function trait()
{
var tmp=document.getElementById("txt");
var ouv=tmp.value.search(/\[EXEMPLE\]/,"gi");
var fer=tmp.value.search(/\[\/EXEMPLE\]/,"gi");
alert ( (ouv!=-1) && (fer!=-1) && (ouv<fer) );
}
</script>
<textarea id="txt">
l1
[EXEMPLE]
ex 1
ex 2
/EXEMPLE </textarea>
il n'y a aucun doute dans mon esprit qu'on peut mieux faire !