Java Regex: char inesperada: '('
Pergunta
Eu estou usando o processamento 1.0.6, que roda em Java 1.6. Eu tenho o seguinte código:
Pattern pattern = Pattern.compile("func\((.*),(\-?[0-9\.]*),(\-?[0-9\.]*),(\-?[0-9\.]*)\)");
mas dá o erro:
unexpected char: '('
e destaques da linha I colado acima. Se eu mudar o \(
ofender a outro personagem como #
, ele reclama da \-
dizendo unexpected char: '-'
. Eu deveria ser capaz de usar literais em um motor de regex e funciona em C #!
Solução
Você precisa escapar as barras invertidas demasiado:
"func\\((.*),(-?[0-9.]*),(-?[0-9.]*),(-?[0-9.]*)\\)"
Essa expressão de cadeia vai a ser avaliada para:
func\((.*),(-?[0-9.]*),(-?[0-9.]*),(-?[0-9.]*)\)
E é isso que você queria.
Outras dicas
Você tem que escapar \ em strings em Java precedendo-o com um \, então
Pattern pattern = Pattern.compile("func\\((.*),(\\-?[0-9\\.]*),(\\-?[0-9\\.]*),(\\-?[0-9\\.]*)\\)");
deve funcionar.
Em Java '(' e '-' não é um caractere desejado-escape So '(' significa '\' sem qualquer caractere desejado-escape por isso ocorrer o erro A solução para isso é a escepe isso de volta.. -slash demasiado:
Pattern pattern = Pattern.compile("func\\((.*),(\\-?[0-9\\.]*),(\\-?[0-9\\.]*),(\\-?[0-9\\.]*)\\)");
Se você precisa usar RegEx em Java e C #, talvez você deve escrever um programa que troca de um para outro.
Eu acho que você deve substituir "\"
com "\\"
Pattern pattern = Pattern.compile("func\\((.*),(\\-?[0-9\\.]*),(\\-?[0-9\\.]*),(\\-?[0-9\\.]*)\\)");