Respuestas:
Si desea que el punto u otros caracteres con un significado especial en expresiones regulares sean un carácter normal, debe escapar con una barra invertida. Dado que las expresiones regulares en Java son cadenas normales de Java, debe escapar de la barra diagonal inversa en sí, por lo que necesita dos barras diagonales inversas, por ejemplo\\.
Las soluciones propuestas por los otros miembros no funcionan para mí.
Pero encontré esto:
para escapar de un punto en Java regexp escribir [.]
\\.
no funcionó para mí: se \.
quejó de que .
no necesita escapar,\\.
hizo pensar que era en \.
lugar de .
, \\\.
y el constructor arrojó un error, [.]
fue lo único que funcionó.
\\.
dentro de un literal de cadena le da lo \.
que necesita la expresión regular para ver el punto como un punto literal en lugar del emparejador de cualquier carácter.
Las expresiones regulares de estilo Perl (en las que se basa más o menos el motor de expresiones regulares de Java) tratan los siguientes caracteres como caracteres especiales:
.^$|*+?()[{\
tener un significado especial fuera de las clases de personajes,
]^-\
tienen un significado especial dentro de las clases de caracteres ( [...]
).
Por lo tanto, debe escapar de esos (y solo esos) símbolos dependiendo del contexto (o, en el caso de las clases de caracteres, colocarlos en posiciones donde no puedan malinterpretarse).
Es posible que escapen innecesariamente otros caracteres, pero algunos motores de expresiones regulares tratarán esto como errores de sintaxis, por ejemplo \_
, causarán un error en .NET.
Algunos otros conducirán a resultados falsos, por ejemplo, \<
se interpreta como un literal <
en Perl, pero egrep
significa "límite de palabras".
Así que escribe -?\d+\.\d+\$
para que coincida 1.50$
, -2.00$
etc. y[(){}[\]]
para una clase de caracteres que coincida con todo tipo de corchetes / llaves / paréntesis.
Si necesita transformar una cadena de entrada de usuario en una forma segura de expresiones regulares, use java.util.regex.Pattern.quote
.
Otras lecturas: el blog de Jan Goyvaert, RegexGuru, sobre los metacaracteres que escapan
Escapar de caracteres especiales con una barra invertida. \.
, \*
, \+
, \\d
, Y así sucesivamente. Si no está seguro, puede escapar de cualquier carácter no alfabético, ya sea especial o no. Consulte el javadoc para java.util.regex.Pattern para obtener más información.
Aquí hay un código que puede copiar y pegar directamente:
String imageName = "picture1.jpg";
String [] imageNameArray = imageName.split("\\.");
for(int i =0; i< imageNameArray.length ; i++)
{
system.out.println(imageNameArray[i]);
}
¿Y si, por error, quedan espacios antes o después de "." ¿en esos casos? Siempre es una buena práctica considerar esos espacios también.
String imageName = "picture1 . jpg";
String [] imageNameArray = imageName.split("\\s*.\\s*");
for(int i =0; i< imageNameArray.length ; i++)
{
system.out.println(imageNameArray[i]);
}
Aquí, \\ s * está ahí para considerar los espacios y darle solo las cadenas divididas requeridas.
Quería hacer coincidir una cadena que termina con ". *" Para esto tuve que usar lo siguiente:
"^.*\\.\\*$"
Un poco tonto si lo piensas: D Heres lo que significa. Al comienzo de la cadena puede haber cualquier carácter cero o más veces seguido de un punto "." seguido de una estrella (*) al final de la cadena.
Espero que esto sea útil para alguien. Gracias por la barra invertida a Fabian.
"\\.\\*$"
entonces. No es necesario que coincida con el comienzo de la cadena si no le importa.
Si desea finalizar, verifique si su oración termina con ". ", Entonces debe agregar [\. \ ] $ Al final de su patrón.