En Java RegEx, cómo averiguar la diferencia entre .
(punto) el meta carácter y el punto normal como lo estamos usando en cualquier oración. Cómo manejar este tipo de situación para otros metacaracteres también como (*
, +
, /d
, ...)Carácter meta de Java RegEx (.) Y punto ordinario?
Respuesta
Si desea que el punto u otros caracteres con un significado especial en expresiones regulares sea un carácter normal, debe escapar con una barra invertida. Dado que las expresiones regulares en Java son cadenas de Java normales, debe escapar de la barra invertida en sí, por lo que necesita dos barras diagonales inversas, p. \\.
Escape de los caracteres especiales con una barra diagonal inversa. \.
, \*
, \+
, \\d
, y así sucesivamente. Si no está seguro, puede escapar de cualquier carácter no alfabético, ya sea que sea especial o no. Ver the javadoc for java.util.regex.Pattern para más información.
Escapar personajes innecesarios podría funcionar en algunos idiomas pero podría fallar en otros, así que es mejor no entrar en el hábito. –
Esta pregunta es específicamente sobre Java, y http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html#bs dice "Se puede utilizar una barra invertida antes de una no - personaje alfabético independientemente de si ese personaje es parte de una construcción no escamada ". –
Perl estilo regulares (que el motor de expresiones regulares Java está más o menos basada en) el tratamiento de los siguientes caracteres como caracteres especiales:
.^$|*+?()[{\
tienen un significado especial fuera de clases de personajes,
]^-\
tiene un significado especial dentro de de clases de caracteres ([...]
).
Así que debe escapar de esos (y solo esos) símbolos según el contexto (o, en el caso de las clases de caracteres, colóquelos en posiciones donde no se puedan malinterpretar).
Escapar innecesariamente de otros caracteres puede funcionar, pero algunos motores de expresiones regulares lo tratarán como errores de sintaxis, por ejemplo \_
causará un error en .NET.
Algunos otros darán lugar a resultados falsos, por ejemplo \<
se interpreta como un literal <
en Perl, pero en egrep
significa "límite de palabra".
Así que escribe -?\d+\.\d+\$
para que coincida con 1.50$
, etc. -2.00$
y [(){}[\]]
para una clase de caracteres que coincida con todo tipo de abrazaderas/abrazaderas/paréntesis.
Si necesita transformar una cadena de entrada de usuario en una forma segura para expresiones regulares, use java.util.regex.Pattern.quote
.
Más información: Jan Goyvaert's blog RegexGuru on escaping metacharacters
quería para que coincida con una cadena que termina con Para esto tuve que utilizar el siguiente "*.":
"^.*\\.\\*$"
un poco tonto si se piensa en ello: D Esto es lo que significa. Al comienzo de la cadena, puede haber cualquier carácter cero o más 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.
Las soluciones propuestas por los otros miembros no funcionan para mí.
Pero encontré esto:
para escapar de un punto en expresión regular de Java escribir [.]
Lo mismo, '\\.' No funcionó: '\ .' se quejó de que' .' no necesita ser escapado, '\\.' Lo hizo pensar que era '\ .' en lugar de '.', ' \\\. 'Y el generador arrojó un error, ' [.] 'Fue lo único que funcionó. – mithunc
Aquí es el código se puede copiar directamente pegar:
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 hay espacios izquierda 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 * ¿hay que considerar los espacios y darle cuerdas splitted única requeridos.
- 1. python, regex split y carácter especial
- 2. Dígitos de concordancia regex, coma y punto y coma?
- 3. PHP Regex Cualquier carácter
- 4. Regex cualquier carácter ascii
- 5. Regex permitir dígitos y un solo punto
- 6. Regex solo números y punto o coma
- 7. regex carácter unicode en vim
- 8. Java Meta-Inf Services
- 9. Regex para eliminar un carácter repetido específico
- 10. ¿Cómo se permite cualquier carácter en RegEx?
- 11. JavaScript regex: encuentre el carácter no numérico
- 12. Regex cómo hacer coincidir un carácter opcional
- 13. HTML Descripción Meta + y
- 14. Reemplazar punto (.) Con coma (,) usando RegEx?
- 15. Reemplazar todo entre [y] en regex java
- 16. Java Regex Carácter ilegal de escape en la clase de caracteres
- 17. ¿Alguien usa meta-meta-classes/meta-meta-meta-classes en Python/otros lenguajes?
- 18. Queue ordinario frente a SEDA Queue
- 19. ¿Cuál es el punto detrás de las intersecciones de clases de caracteres en Regex de Java?
- 20. Regex en java y su rendimiento en comparación con indexOf
- 21. Python regex para nombres de paquete Java
- 22. Java regex: Negative lookahead
- 23. Expresión regular de Java value.split ("\\."), "El punto de barra invertida" se divide por carácter?
- 24. Java regex siempre falla
- 25. Retire carácter de punto de una cadena de C#
- 26. Regex partido de cualquier carácter 5 o más veces
- 27. Regex para que coincida con el último carácter de espacio
- 28. Java Regex a-z, A-Z, 0-9 y (.) (_) (-)
- 29. Carácter de tabulación en Java
- 30. Java String.replaceAll regex
esta corrección también se aplica a bash – krivar
Tenga en cuenta que si se salta la barra diagonal inversa depende de cómo se está suministrando la expresión regular. si está codificado, necesita usar: "\\". Si lee desde una fuente sin formato (por ejemplo, un archivo de texto), usa solo una barra invertida: \. – Paul