En Java RegEx, comment trouver la différence entre .
(point) le caractère méta et le point normal que nous utilisons dans une phrase. Comment gérer ce type de situation pour d'autres méta caractères comme (*
, +
, /d
, ...)Caractère méta Java RegEx (.) Et point ordinaire?
Répondre
Si vous souhaitez que le point ou d'autres caractères ayant une signification particulière dans les expressions régulières soient des caractères normaux, vous devez y échapper avec un antislash. Étant donné que les expressions régulières en Java sont des chaînes Java normales, vous devez échapper à la barre oblique inverse elle-même. Vous avez donc besoin de deux barres obliques inverses, par ex. \\.
Échapper les caractères spéciaux avec un antislash. \.
, \*
, \+
, \\d
et ainsi de suite. Si vous n'êtes pas sûr, vous pouvez échapper tout caractère non alphabétique, qu'il soit spécial ou non. Voir the javadoc for java.util.regex.Pattern pour plus d'informations.
Echapper à des caractères spéciaux peut inutilement fonctionner dans certaines langues mais peut échouer dans d'autres, il est donc préférable de ne pas prendre l'habitude. –
Cette question concerne spécifiquement Java, et http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html#bs dit "Une barre oblique inversée peut être utilisée avant une caractère alphabétique, que ce caractère fasse ou non partie d'une construction non échappée. " –
Perl style des expressions régulières (que le moteur Java regex est plus ou moins basée sur) traiter les caractères suivants comme des caractères spéciaux:
.^$|*+?()[{\
ont une signification particulière en dehors des classes de personnages,
]^-\
ont une signification spéciale à l'intérieur des classes de caractères ([...]
). Vous avez donc besoin d'échapper à ces symboles (et seulement ceux-ci) en fonction du contexte (ou, dans le cas de classes de caractères, placez-les dans des positions où ils ne peuvent pas être mal interprétés).
Échapper inutilement à d'autres caractères peut fonctionner, mais certains moteurs d'expressions régulières traiteront cela comme des erreurs de syntaxe, par exemple \_
provoquera une erreur dans .NET. Certains autres conduiront à des résultats erronés, par exemple \<
est interprété comme un littéral <
en Perl, mais en egrep
cela signifie "limite de mot".
donc écrire -?\d+\.\d+\$
pour correspondre 1.50$
, etc. -2.00$
et [(){}[\]]
pour une classe de caractères qui correspond à tous les types de supports/accolades/parenthèses.
Si vous devez transformer une chaîne d'entrée utilisateur en une forme sans danger pour la regex, utilisez java.util.regex.Pattern.quote
.
Pour en savoir plus: Jan Goyvaert's blog RegexGuru on escaping metacharacters
Je voulais correspondre à une chaîne qui se termine par Pour cela, je devais utiliser ce qui suit « *. »:
"^.*\\.\\*$"
Kinda stupide si vous pensez à ce sujet: D Voici ce que cela signifie. Au début de la chaîne, il peut y avoir un caractère zéro ou plusieurs fois suivi d'un point "." suivi d'une étoile (*) à la fin de la chaîne. J'espère que cela sera utile pour quelqu'un d'autre. Merci pour le backslash à Fabian.
Les solutions proposées par les autres membres ne fonctionnent pas pour moi.
Mais je trouve ceci:
pour échapper à un point en java regexp écrire [.]
De même, '\\.' N'a pas fonctionné pour moi: '\ .' s'est plaint que' .' n'a pas besoin d'être échappé, '\\.' A fait croire que c'était '\ .' au lieu de '.', ' \\\. 'Et le constructeur a jeté une erreur, ' [.] 'Était la seule chose qui a fonctionné. – mithunc
Code est ici que vous pouvez directement copier coller:
String imageName = "picture1.jpg";
String [] imageNameArray = imageName.split("\\.");
for(int i =0; i< imageNameArray.length ; i++)
{
system.out.println(imageNameArray[i]);
}
Et si erreur il y a des espaces gauche avant ou après "." dans ces cas? C'est toujours la meilleure pratique de considérer ces espaces aussi.
String imageName = "picture1 . jpg";
String [] imageNameArray = imageName.split("\\s*.\\s*");
for(int i =0; i< imageNameArray.length ; i++)
{
system.out.println(imageNameArray[i]);
}
Ici, \\ s * est là pour tenir compte des espaces et vous donner uniquement des chaînes nécessaires dédoublées.
- 1. XSD regex validate a échoué: méta caractère inattendu
- 2. Regex Rechercher et remplacer dans Eclipse: Comment réparer le caractère méta balançant 'x'?
- 3. Regex annulant 'caractère de section' dans java
- 4. Comment échapper un caractère méta dans une expression régulière
- 5. regex pour obtenir des méta-mots-clés
- 6. Regex pour alphanumérique et le caractère +
- 7. python, regex split et caractère spécial
- 8. java regex recherche?
- 9. regex aucun caractère
- 10. Caractère accentué regex
- 11. point d'interrogation d'échappement dans regex javascript
- 12. regex caractère unicode dans vim
- 13. java string regex
- 14. Ruby Programmation et méta-combinaisons
- 15. regex pour alphanumérique et autoriser un caractère supplémentaire également
- 16. Regex: Correspond à n'importe quel caractère de ponctuation sauf. et
- 17. Caractère qui peut être utilisé pour distinguer ensemble de regex et ce caractère ne doit pas être utilisé dans regex
- 18. ibatis java.util.Map paramètres avec point (.) Caractère
- 19. Regex: simple Java Regex Question
- 20. JavaScript Regex à Java Regex - Remplacer et Lambda
- 21. Regex pour correspondre à un seul caractère
- 22. PHP regex, espace ou aucun caractère
- 23. Regex élimine le caractère barre verticale/tuyau
- 24. Problème avec% et/dans Java regex
- 25. $ 1 ne produisant aucun caractère dans regex
- 26. regex: caractère de recherche toujours pas parfait
- 27. Comment capturer l'existence d'un caractère en Java
- 28. Comment distinguer un commit ordinaire et fusionner dans Subversion?
- 29. Trouver tout sauf la première occurrence d'un caractère avec REGEX
- 30. Comment faire correspondre et remplacer un caractère non-mot entre des caractères de mot avec RegEx?
ce correctif s'applique également à bash – krivar
Sachez que l'échappement de la barre oblique inverse dépend de la façon dont vous fournissez l'expression rationnelle. Si vous avez codé en dur, vous devez utiliser: "\\". Si vous lisez une source brute (par exemple un fichier texte), vous n'utilisez qu'une seule barre oblique inverse: \. – Paul