a écrit :
J'ai l'impression que le fait de ne pas échapper des caractères spéciaux à l'intérieur de [] ne fonctionne pas toujours, malgré ce que dit la doc. En particulier
en javascript. Donc j'échappe systématiquement.
Pareil. Le seul truc que je me permets de ne pas échapper est le tiret dans une classe de caractères (Ex : [-a-z] ) qui fonctionne partout celui-là, autant en java, en javascript, en mod rewrite apache ou en php.
[mode pub on]
Au passage, j'ai programmé il y a quelque temps un outil de test de regexp en js. Si ça intéresse quelqu'un, je mettrai l'URL.
[mode pub off]
A propos des patterns de ton précédent message, ils ont tous une signification bien différente.
.* recherche une série de caractères quelconques, le plus de caractères possible pour satisfaire la regexp
.*? recherche aussi une série de caractères quelconques, mais prend le moins de caractères possible pour satisfaire la regexp
Maintenant si tu mets + à la place de *, la série de caractères sélectionnée par la regexp ne doit pas être vide, autrement dit contenir au moins un caractère.
Encore autrement dit, .* autorise la chaîne vide alors que .+ pas.
Maintenant pour ce qui est de (.+)? ou (?:.+)? la signification est légèrement différente. Le point d'interrogation indique que l'élément précédent doit se trouver 0 ou 1 fois.
Ici, pris seul, ce pattern est identique à .* car il signifie « 0 ou 1 fois une série de 1 caractère minimum ». 0 fois étant, fatalement, la chaîne vide.
Utiliser cette notation prend tout son sens lorsqu'on adjoint autre chose à la parenthèse du .+.
Par exemple : (#.+)? signifie « un # suivi d'au moins un caractère, ou rien ». Un # seul ne sera donc pas pris en compte...
Je ne sais pas si mes explications sont claires ?