Dans Java RegEx, comment trouver la différence entre .
(point) le méta-caractère et le point normal comme nous l'utilisons dans n'importe quelle phrase. Comment gérer ce genre de situation pour d' autres caractères meta aussi comme ( *
, +
, \d
, ...)
150
Les solutions proposées par les autres membres ne fonctionnent pas pour moi.
Mais j'ai trouvé ceci:
pour échapper à un point dans java regexp write
[.]
la source
\\.
n'a pas fonctionné pour moi: se\.
plaindre qu'il.
n'est pas nécessaire d'échapper, lui\\.
faire penser que c'était à la\.
place.
,\\\.
et le constructeur a lancé une erreur,[.]
c'était la seule chose qui fonctionnait.\\.
intérieur d'un littéral de chaîne vous donne ce\.
dont le regex a besoin pour voir le point comme un point littéral au lieu du matcher n'importe quel caractère.Les expressions régulières de style Perl (sur lesquelles le moteur Java regex est plus ou moins basé) traitent 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 particulière à l' intérieur des classes de caractères ([...]
).Vous devez donc échapper à ces symboles (et uniquement ceux-ci) en fonction du contexte (ou, dans le cas des classes de caractères, les placer dans des positions où ils ne peuvent pas être mal interprétés).
L'échappement inutile d'autres caractères peut fonctionner, mais certains moteurs d'expression régulière traiteront cela comme des erreurs de syntaxe, par exemple
\_
provoquera une erreur dans .NET.Certains autres conduiront à de faux résultats, par exemple
\<
est interprété comme un littéral<
en Perl, mais enegrep
cela signifie «limite de mot».Alors écrivez
-?\d+\.\d+\$
pour correspondre1.50$
,-2.00$
etc. et[(){}[\]]
pour une classe de caractères qui correspond à toutes sortes de crochets / accolades / parenthèses.Si vous avez besoin de transformer une chaîne d'entrée utilisateur en une forme regex-safe, utilisez
java.util.regex.Pattern.quote
.Lectures complémentaires: le blog RegexGuru de Jan Goyvaert sur les métacaractères qui s'échappent
la source
Échappez 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.la source
Voici le code que vous pouvez directement copier coller:
Et si par erreur il reste des espaces avant ou après "." dans ces cas? Il est toujours préférable de considérer ces espaces également.
Ici, \\ s * est là pour considérer les espaces et vous donner uniquement les chaînes fractionnées requises.
la source
Je voulais faire correspondre une chaîne qui se termine par ". *" Pour cela, j'ai dû utiliser ce qui suit:
Un peu idiot si vous y réfléchissez: D Voici ce que cela signifie. Au début de la chaîne, il peut y avoir 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 sera utile pour quelqu'un. Merci pour la barre oblique inverse à Fabian.
la source
"\\.\\*$"
alors. Pas besoin de faire correspondre le début de la chaîne si cela ne vous importe pas.Si vous voulez terminer, vérifiez si votre phrase se termine par ". " Alors vous devez ajouter [\. \ ] $ À la fin de votre modèle.
la source
Je fais un tableau de base dans JGrasp et j'ai trouvé cela avec une méthode d'accesseur pour un tableau char [] [] à utiliser ('.') Pour placer un seul point.
la source