Java 正则表达式:意外字符:'('

发布于 2024-08-06 02:38:03 字数 396 浏览 6 评论 0原文

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

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

但它给出了错误:

unexpected char: '('

并突出显示了我上面粘贴的行。如果我将有问题的 \( 更改为 # 等另一个字符,它会抱怨 \-unexpected char: '-'我应该能够在正则表达式引擎中使用文字,并且它可以在 C# 中工作!

I am using processing 1.0.6, which runs on java 1.6. I have the following code:

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

but it gives the error:

unexpected char: '('

and highlights the line I pasted above. If I change the offending \( to another character like #, it complains of the \- saying unexpected char: '-'. I should be able to use literals in a regex engine and it works in C#!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

深府石板幽径 2024-08-13 02:38:03

您也需要转义反斜杠:

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

该字符串表达式将被计算为:

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

这就是您想要的。

You need to escape the backslashes too:

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

That string expression will the be evaluated to:

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

And that’s what you wanted.

陈年往事 2024-08-13 02:38:03

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

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

应该可以。

You have to escape \ in strings in Java by preceding it with a \, so

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

should work.

じ违心 2024-08-13 02:38:03

在Java中'('和'-'不是需要转义的字符。因此'('意味着'\'没有任何需要转义的字符,这就是发生错误的原因。解决这个问题的解决方案是反斜杠的escepe :

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

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

In Java '(' and '-' is not an escape-required character. So '(' means '\' without any escape-required character that is why the error occur. The solution to this is the escepe that back-slash too:

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

If you need to use RegEx in both Java and C#, perhaps you should write a program that swap from one to another.

庆幸我还是我 2024-08-13 02:38:03

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

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

I think you should replace "\" with "\\"

Pattern pattern = Pattern.compile("func\\((.*),(\\-?[0-9\\.]*),(\\-?[0-9\\.]*),(\\-?[0-9\\.]*)\\)");
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文