Java RegEx meta caractère (.) et point ordinaire?


Dans Java RegEx, comment trouver la différence entre . (dot) le méta-caractère et le point normal que nous utilisons dans n'importe quelle phrase. Comment gérer ce genre de situation pour d'autres méta caractères aussi comme (*,+,/d,...)

Author: Donal Fellows, 2010-09-09

8 answers

Si vous voulez que le point ou d'autres caractères ayant une signification particulière dans les expressions régulières soient un caractère normal, vous devez y échapper avec une barre oblique inverse. É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 exemple \\.

 230
Author: Fabian Steeg, 2010-09-09 08:40:35

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 écrire [.]

 16
Author: Kael, 2015-08-28 13:38:03

Les expressions régulières de style Perl (sur lesquelles le moteur regex Java est plus ou moins basé) traitent les caractères suivants comme des caractères spéciaux:

.^$|*+?()[{\ ont une signification spéciale dehors de des classes de caractères,

]^-\ ont une signification spéciale dans des classes de caractères ([...]).

Vous devez donc échapper ces (et seulement ces) symboles en fonction du contexte (ou, dans le cas des classes de caractères, les placer dans des positions où ils ne peuvent pas être interpréter).

Échapper inutilement à d'autres caractères peut fonctionner, mais certains moteurs regex traiteront cela comme des erreurs de syntaxe, par exemple {[3] } provoquera une erreur dans. NET.

D'autres conduiront à de faux résultats, par exemple \< est interprété comme un littéral < en Perl, mais dans egrep cela signifie "limite de mot".

Alors écrivez -?\d+\.\d+\$ pour correspondre 1.50$, -2.00$ etc. et [(){}[\]] pour une classe de caractères qui correspond à toutes sortes de crochets/accolades/parenthèses.

Si vous besoin de transformer une chaîne d'entrée utilisateur en une forme regex-safe, utilisez java.util.regex.Pattern.quote.

Pour en savoir plus: Le blog de Jan Goyvaert RegexGuru sur l'évasion des métacaractères

 14
Author: Tim Pietzcker, 2013-11-01 12:35:42

É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 caractère non alphabétique, qu'il soit spécial ou non. Voir le javadoc pour java.util.regex.Pattern pour plus d'informations.

 4
Author: Christoffer Hammarström, 2010-09-09 08:37:30

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 pensez: D 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 par 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.

 1
Author: Atspulgs, 2015-08-21 13:27:37

Voici le code 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 par erreur il reste des espaces avant ou après "."dans de tels cas? Il est toujours préférable de considérer ces espaces.

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 considérer les espaces et vous donner uniquement les chaînes divisées requises.

 1
Author: Vyankatesh S Repal, 2017-06-06 06:46:44

Si vous voulez vérifier si votre phrase se termine par "." ensuite, vous devez ajouter [\.\]$ à la fin de votre motif.

 0
Author: madhu gogineni, 2018-05-25 06:16:46

Je fais un tableau de base dans JGrasp et j'ai trouvé cela avec une méthode accessor pour un tableau char [] [] à utiliser ('.') au lieu d'un seul point.

 0
Author: rgm, 2018-07-06 22:44:14