java 字符中的正则表达式双反斜杠 class

java regex double-backslash in character class

我需要在 Java 中执行以下正则表达式:

在前面没有反斜杠(即转义)且后跟零个或多个空格的每个逗号处拆分一个字符串。

我一直在尝试这个:

String str = "Name=Doe\, Jane, Hobby=Skiing, Height=1.70";
String[] parts = str.split("[^\],\s*");

这是 Perl 中的正确语法并且可以在那里工作。在 Java 中并非如此。

以上在编译时已经抛出异常:

error: illegal escape character
    String[] parts = str.split("[^\],\s*");

在字符 class 中添加第三个和第四个反斜杠没有帮助

str.split("[^\\],\s*");

向空格添加第二个反斜杠允许它编译,

String[] parts = str.split("[^\],\s*");

但随后运行时 regex.PatternSyntaxException 发生,说明 unclosed character class:

java.util.regex.PatternSyntaxException: Unclosed character class
near index 7
[^\],\s*
       ^

显然少了一个反斜杠,我无法输入... 谁能告诉我在 Java 中应该怎么做?

谢谢!

regex 做你想做的。您忘记添加两个额外的 \:

String[] parts = str.split("[^\\],\s*");

就像这个问题中解释的那样:(java regex pattern unclosed character class)