2009-09-26 6 views
0

J'utilise le traitement 1.0.6, qui fonctionne sur Java 1.6 Je le code suivant:.Java regexs: inattendu CHAR: '('

Pattern pattern = Pattern.compile("func\((.*),(\-?[0-9\.]*),(\-?[0-9\.]*),(\-?[0-9\.]*)\)"); 

mais il donne l'erreur:

unexpected char: '(' 

et met en évidence la ligne que je collais ci-dessus. Si je change l'infraction \( à un autre personnage comme #, il se plaint de la \- disant unexpected char: '-'. Je devrais pouvoir utiliser littéraux dans un moteur regex et il fonctionne en C#!

+2

Joli travail mettant l'émoticône pleure/grosse lèvre dans le titre. – theycallmemorty

Répondre

5

Vous devez les backslashs aussi:

"func\\((.*),(-?[0-9.]*),(-?[0-9.]*),(-?[0-9.]*)\\)" 

Cette expression de chaîne sera l'être évaluée à:

func\((.*),(-?[0-9.]*),(-?[0-9.]*),(-?[0-9.]*)\) 

Et c'est ce que vous vouliez.

+0

Est-ce que java a quelque chose de similaire à la notation @ "literal string" de C#? –

+0

C Rogers: non. En aparté: MS aurait-elle pu choisir un nom plus mauvais pour cette notation? "Chaîne littérale" par opposition à une "chaîne littérale" ordinaire. Pouah. –

+0

Mon erreur, ils sont appelés "littéraux de chaîne". –

0

Vous devez vous échapper \ dans les chaînes en Java par le précédant avec un \, donc

Pattern pattern = Pattern.compile("func\\((.*),(\\-?[0-9\\.]*),(\\-?[0-9\\.]*),(\\-?[0-9\\.]*)\\)"); 

devrait fonctionner.

0

Je pense que vous devriez remplacer "\" avec "\\"

Pattern pattern = Pattern.compile("func\\((.*),(\\-?[0-9\\.]*),(\\-?[0-9\\.]*),(\\-?[0-9\\.]*)\\)"); 
0

En Java '(' et '-' est pas un caractère d'échappement-requis So '(' signifie '\' sans caractère d'échappement-requis. . c'est la raison pour laquelle l'erreur se produit la solution est la escepe que barre oblique inverse aussi:

Pattern pattern = Pattern.compile("func\\((.*),(\\-?[0-9\\.]*),(\\-?[0-9\\.]*),(\\-?[0-9\\.]*)\\)"); 

Si vous devez utiliser RegEx dans Java et C#, peut-être vous devriez écrire un programme qui échangent de l'un à un autre

+0

Je viens tout juste de passer de C# à Java (en raison de l'excellent framework http://www.processing.org/), donc je m'habitue toujours aux changements de grammaire/fonctionnalité. –