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 #!

Foi útil?

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\\.]*)\\)");
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top