168 votes

Le méta-caractère Java RegEx (.) Et le point ordinaire?

En Java RegEx, comment connaître la différence entre . (point) du méta-caractère et le point normal, comme dans toute phrase. Comment gérer ce genre de situation pour d'autres méta-personnages aussi, comme ( * , + , /d , ...)

311voto

Fabian Steeg Points 24261

Si vous voulez que le point ou d'autres caractères ayant une signification spéciale dans les expressions rationnelles soient des caractères normaux, vous devez y échapper avec une barre oblique inverse. Comme les expressions rationnelles en Java sont des chaînes Java normales, vous devez échapper à la barre oblique inverse, vous avez donc besoin de deux barres obliques inverses, par exemple \\.

18voto

Tim Pietzcker Points 146308

Perl-style expressions régulières (dont le moteur d'expressions régulières Java est plus ou moins basé sur) traiter les caractères suivants comme des caractères spéciaux:

.^$|*+?()[{\ ont une signification particulière en dehors des classes de caractères,

]^-\ ont une signification spéciale à l'intérieur de classes de caractères ([...]).

Si vous avez besoin d'échapper à ceux (et uniquement ceux-ci) des symboles selon le contexte (ou, dans le cas de classes de personnages, de les placer dans des positions où ils ne peuvent pas être mal interprété).

Inutilement pour échapper à d'autres caractères peuvent travailler, mais certains regex moteurs de traiter ce que les erreurs de syntaxe, par exemple \_ entraîne une erreur .NET.

D'autres vont conduire à des résultats faux, par exemple \< est interprété comme un littéral < en Perl, mais, en egrep il signifie "mot".

Afin d'écrire en -?\d+\.\d+\$ pour correspondre 1.50$, -2.00$ etc. et [(){}[\]] pour une classe de caractères qui correspond à tous les types de supports/bretelles/parenthèses.

Si vous avez besoin de transformer un utilisateur de la chaîne d'entrée dans une regex-forme sûre, utilisez java.util.regex.Pattern.quote.

Pour en savoir plus: Jan Goyvaert blog RegexGuru sur la fuite des métacaractères

4voto

Échapper aux caractères spéciaux avec une barre oblique inverse. \. , \* , \+ , \\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 le javadoc pour java.util.regex.Pattern pour plus d'informations.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X