Java RegEx méta caractère (.) et ordinaire de la dot?
En Java RegEx, comment trouver la différence entre .
(dot), le méta-caractère et de la dot comme nous l'utilisant dans une phrase. Comment gérer ce genre de situation pour les autres méta-caractères aime trop (*
,+
,/d
,...)
Vous devez vous connecter pour publier un commentaire.
Si vous voulez la dot ou d'autres caractères ayant une signification spéciale dans les regexes être un caractère normal, vous avez à s'échapper avec un backslash. Depuis regexes en Java sont normales cordes de Java, vous devez vous échapper de la barre oblique inverse, si vous avez besoin de deux barres obliques inverses par exemple
\\.
Solutions proposées par les autres membres n'ont pas de travail pour moi.
Mais j'ai trouvé cela :
pour échapper à un point dans java regexp écrire
[.]
\\.
ne fonctionne pas pour moi:\.
plaint de ce que.
n'a pas besoin d'être échappé,\\.
fait il pense que c'était\.
au lieu de.
,\\\.
et le constructeur a jeté une erreur,[.]
était la seule chose qui a fonctionné.\\.
à l'intérieur d'un littéral de chaîne vous donne\.
qui est ce que la regex doit voir le point comme un littéral point au lieu de la toute-caractère de correspondance.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 spéciale à l'extérieur de classes de caractères,]^-\
ont une signification spéciale à l'intérieur de de classes de caractères ([...]
).Donc, vous avez besoin pour é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 échapper à d'autres caractères peuvent travailler, mais certains regex moteurs de traiter ce que les erreurs de syntaxe, par exemple
\_
provoquera une erreur .NET.D'autres vont conduire à des résultats faux, par exemple
\<
est interprété comme un littéral<
en Perl, mais dansegrep
il signifie "mot".Afin d'écrire
-?\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
Échapper les 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 non-caractère alphabétique s'il est spécial ou pas. Voir la javadoc de java.util.regex.Modèle pour de plus amples informations.Je voulais correspondre à une chaîne qui se termine par ".*"
Pour cela, j'ai eu à utiliser les éléments suivants:
Un peu idiot si vous pensez à ce sujet 😀
Heres ce que cela signifie. Au début de la chaîne, il peut être n'importe quel 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 est utile pour quelqu'un. Merci pour la barre oblique inverse chose à Fabian.
"\\.\\*$"
ensuite. Pas besoin de match pour le début de la chaîne si ce n'est pas grave pour vous.Voici le code, vous pouvez directement copier coller :
Et si par erreur il y a des espaces à gauche, avant ou après le "." dans ce cas? Il est toujours préférable de considérer ces espaces.
Ici, \\s* est là à considérer les espaces et de vous donner uniquement tenus séparés des chaînes.
Si vous voulez vérifier si votre phrase se termine par "." ensuite, vous devez ajouter [\.\]$ à la fin de votre modèle.
Je suis en train de faire quelques notions de tableau dans JGrasp et constaté qu'avec une méthode d'accesseur pour un char[][] matrice d'utilisation ('.') pour placer un seul point.