Java Regex: inattendu CHAR: '('
Question
J'utilise le traitement 1.0.6, qui fonctionne sur Java 1.6. Je le code suivant:
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 le \(
incriminé à un autre personnage comme #
, il se plaint de la \-
dire unexpected char: '-'
. Je devrais être en mesure d'utiliser littéraux dans un moteur regex et il fonctionne en C #!
La solution
Vous devez les backslashs aussi:
"func\\((.*),(-?[0-9.]*),(-?[0-9.]*),(-?[0-9.]*)\\)"
Cette expression de chaîne sera l'objet d'une évaluation à:
func\((.*),(-?[0-9.]*),(-?[0-9.]*),(-?[0-9.]*)\)
Et c'est ce que vous vouliez.
Autres conseils
Vous devez échapper \ dans les chaînes en Java par ce qui précède avec un \, donc
Pattern pattern = Pattern.compile("func\\((.*),(\\-?[0-9\\.]*),(\\-?[0-9\\.]*),(\\-?[0-9\\.]*)\\)");
devrait fonctionner.
En Java « ( » et « - ».. N'est pas un caractère d'échappement-requis Donc « ( » signifie « \ » sans caractère d'échappement-requis qui est la raison pour laquelle l'erreur se produit La solution est le escepe que de retour -slash 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 à l'autre.
Je pense que vous devriez remplacer "\"
avec "\\"
Pattern pattern = Pattern.compile("func\\((.*),(\\-?[0-9\\.]*),(\\-?[0-9\\.]*),(\\-?[0-9\\.]*)\\)");