Je n'arrive pas à obtenir des expressions régulières avec des caractères de début/de fin correspondant à Java (1.6.20).
A partir de ce code:
System.out.println("$40".matches("\\b\\Q$40\\E\\b"));
System.out.println("$40".matches(".*\\Q$40\\E.*"));
System.out.println("$40".matches("\\Q$40\\E"));
System.out.println(" ------ ");
System.out.println("40$".matches("\\b\\Q40$\\E\\b"));
System.out.println("40$".matches(".*\\Q40$\\E.*"));
System.out.println("40$".matches("\\Q40$\\E"));
System.out.println(" ------ ");
System.out.println("4$0".matches("\\b\\Q4$0\\E\\b"));
System.out.println("40".matches("\\b\\Q40\\E\\b"));
-je obtenir ces résultats:
false
true
true
------
false
true
true
------
true
true
Le premier faux dans les deux premiers blocs semblent être le problème. C'est-à-dire que le signe avant/arrière $ (signe dollar) n'est pas repris correctement dans le contexte du marqueur \ b (limite de mot). Les vrais résultats dans les blocs montrent que ce n'est pas le signe dollar lui-même, puisque remplacer le b avec un. * Ou supprimer tous ensemble donne le résultat désiré. Les deux derniers résultats "true" montrent que le problème ne se trouve pas dans une citation interne de $ ni avec correspondance sur les limites de mot (\ b) dans l'expression quotée "\ Q ... \ E".
Est-ce un bug de Java ou manque-t-il quelque chose?
Ne pas supprimer; Il suffit de marquer Tomalak la bonne réponse, ou de clarifier si vous avez découvert quelque chose. Aide les personnes qui ont le même problème et qui recherchent en ligne pour cela. – Will
Merci pour le conseil, Will - accepté ci-dessous. –