Pour l’indentation du code : je mets des espaces insécables :oP
Pour le 2., mon code (qui élimine les commentaires et les espaces dès le départ) fonctionne sur les exemples que tu as donnés. Tu as des exemples qui ne passent pas ?
Pour *? et +?, ils se différencient de * et + par le fait que * et + essaient de correspondre à la plus longue chaîne possible alors que *? et +? s’arrêtent dès qu’ils peuvent. (* et + sont dits greedy, *? et +? lazy.) Exemple classique : pour attraper une balise HTML (et juste la balise), on utilise /<.+?>/ car /<.+>/ va tout gober entre la première et la dernière balises du texte.
Utiliser la négation ([^X]*) est moins gourmande car le moteur n’a pas besoin de faire du backtrack (ce qu’il doit faire avec .*?). Je trouve ça aussi plus clair.
Pour les guillemets, il va peut-être falloir utiliser autre chose (une grammaire p.ex., au moins des états), ne serait-ce que parce qu’il faudra aussi gérer les sauts de ligne entre les guillemets.
[^] # Re: manque bang ?!
Posté par Sylvain Sauvage . En réponse au message Expressions régulières. Évalué à 2.
Pour le 2., mon code (qui élimine les commentaires et les espaces dès le départ) fonctionne sur les exemples que tu as donnés. Tu as des exemples qui ne passent pas ?
Pour *? et +?, ils se différencient de * et + par le fait que * et + essaient de correspondre à la plus longue chaîne possible alors que *? et +? s’arrêtent dès qu’ils peuvent. (* et + sont dits greedy, *? et +? lazy.) Exemple classique : pour attraper une balise HTML (et juste la balise), on utilise /<.+?>/ car /<.+>/ va tout gober entre la première et la dernière balises du texte.
Utiliser la négation ([^X]*) est moins gourmande car le moteur n’a pas besoin de faire du backtrack (ce qu’il doit faire avec .*?). Je trouve ça aussi plus clair.
Pour les guillemets, il va peut-être falloir utiliser autre chose (une grammaire p.ex., au moins des états), ne serait-ce que parce qu’il faudra aussi gérer les sauts de ligne entre les guillemets.