Bon je sais pas vous mais moi ça me gonfle de devoir écrire l'expression reguliere qui signifie : "manger jusqu'a" !
Exemple :
1) Vous souhaitez chercher une balise html
<truc ... >
Facile ! C'est "<[^>]*>"
2) Vous souhaitez chercher un commentaire en c++, php, ...
/* commentaire [sur plusieurs lignes] */
Heu attend je réfléchi ... arf galère
3) Vous souhaitez chercher des commentaires html
<!-- ... -->
Heu attend .. AU SECOUR !!!
Bon clairement ca devient vite infernal !
Donc le but de cette source est de générer la regexp qui va manger tout jusqu'à une chaine précise (la chaine est inclue dans le repas de la regexp :p)
Les expressions régulières requise pour les exemples ci-dessus s'écriront donc :
1) "<" + UNTIL_WITH(">");
2) "/\*" + UNTIL_WITH("*/");
2) "<!--" + UNTIL_WITH("-->");
Carrément plus simple non ? :)
Le code est un peu astucieux et faut réfléchir pour le comprendre ...
Bon je sais ... vous allez tous pomper le code et basta X-D !
La fonction UNTIL_WITH prend en argument une chaine normale,
les caractères spéciaux n'ont pas besoin d'être échappé.
Une variable static recense les caracteres qui seront echappé automatiquement.
Les autres variables static sont à modifier par vos soins !
(super rapide normalement si vous connaissez les regexp)
J'ai fait une autre fonction UNTILS_WITH (notez le 'S' à UNTIL) qui génère une regexp qui mange tout jusqu'à tomber sur une des deux chaines.
Exemple : UNTILS_WITH("fin", "end");
La fonction est EXTREMEMENT simple car elle utilise juste UNTIL_WITH !
En regardant la source vous pourrez faire une liste aussi longue que vous le souhaitez.
A noter enfin qu'au cas ou une chaine est prefixe d'une autre cela ne pose pas de probleme,
c'est la chaine la plus longue qui sera manger à la fin.