Réponses:
Si vous voulez que le point ou d'autres caractères avec une signification spéciale dans les expressions régulières soient un caractère normal, vous devez l'échapper avec une barre oblique inverse. Puisque les expressions rationnelles 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\\.
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 [.]
\\.
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 en 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 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
É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.
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 ces cas? Il est toujours préférable de considérer ces espaces également.
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 fractionnées requises.
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.
"\\.\\*$"
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.