Java expresiones regulares: char inesperada: '('
Pregunta
Estoy utilizando procesamiento 1.0.6, que funciona con Java 1.6. Tengo el siguiente código:
Pattern pattern = Pattern.compile("func\((.*),(\-?[0-9\.]*),(\-?[0-9\.]*),(\-?[0-9\.]*)\)");
pero da el error:
unexpected char: '('
y pone de relieve la línea pegué arriba. Si cambio la \(
ofensor a otro personaje como #
, se queja de la \-
diciendo unexpected char: '-'
. Debería ser capaz de utilizar literales en un motor de expresiones regulares y funciona en C #!
Solución
Es necesario para escapar de las barras invertidas también:
"func\\((.*),(-?[0-9.]*),(-?[0-9.]*),(-?[0-9.]*)\\)"
Esa expresión de cadena será el ser evaluada para:
func\((.*),(-?[0-9.]*),(-?[0-9.]*),(-?[0-9.]*)\)
Y eso es lo que quería.
Otros consejos
Tienes que escapar \ en las cadenas en Java por lo precede con un \, de modo
Pattern pattern = Pattern.compile("func\\((.*),(\\-?[0-9\\.]*),(\\-?[0-9\\.]*),(\\-?[0-9\\.]*)\\)");
debería funcionar.
En Java '(' y '-'.. No es un carácter de escape-requerido Así '(' significa '\' sin ningún carácter de escape-requerido es por eso que se produce el error La solución a esto es el escepe que volver -slash también:
Pattern pattern = Pattern.compile("func\\((.*),(\\-?[0-9\\.]*),(\\-?[0-9\\.]*),(\\-?[0-9\\.]*)\\)");
Si es necesario utilizar expresiones regulares en Java y C #, tal vez debería escribir un programa que cambiar de una a otra.
Creo que se debe reemplazar con "\"
"\\"
Pattern pattern = Pattern.compile("func\\((.*),(\\-?[0-9\\.]*),(\\-?[0-9\\.]*),(\\-?[0-9\\.]*)\\)");