Java Regex:意外的char:'('

时间:2009-09-26 19:57:46

标签: java regex literals

我正在使用处理1.0.6,它运行在java 1.6上。我有以下代码:

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

但它给出了错误:

unexpected char: '('

并突出显示我上面粘贴的线条。如果我将违规\(更改为#之类的其他字符,则会抱怨\-unexpected char: '-'。我应该能够在正则表达式引擎中使用文字,它适用于C#!

4 个答案:

答案 0 :(得分:5)

你也需要逃避反斜杠:

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

该字符串表达式将被评估为:

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

这就是你想要的。

答案 1 :(得分:0)

你必须在Java中的字符串中转义\,前面加上\,所以

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

应该有用。

答案 2 :(得分:0)

我认为您应该将"\"替换为"\\"

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

答案 3 :(得分:0)

在Java中'('和' - '不是一个需要转义的字符。所以'('表示'\',没有任何转义必需的字符,这就是错误发生的原因。解决这个问题的方法是后面的escepe -slash也是:

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

如果你需要在Java和C#中使用RegEx,也许你应该编写一个从一个程序交换到另一个程序的程序。