java.util.regex.PatternSyntaxException:索引附近未关闭的字符类

Ted*_*Ted 4 java regex

我正在用 Java 编写正则表达式,但在运行程序时出现错误。

private final static Pattern QUOTE_VALUE = Pattern.compile("[_]?([a-zA-Z0-9_]+)=(\"[^]*\"),");
// Then later on down the road......
Macher m = QUOTE_VALUE.matcher(myString);
while (m.find()){
  System.out.println("Found " + m.group(1) + " " + m.group(2));
}
Run Code Online (Sandbox Code Playgroud)

我想让我的正则表达式匹配这些示例值。

_MyKey="ID IN [ "ABC" ]",  // Note - it has a comma after the ]
_MyKey="ID IN [ ""XYZ"" ]",   // Note - it has a comma after the ]
Run Code Online (Sandbox Code Playgroud)

我使用在线正则表达式助手进行了尝试 - 我的正则表达式实际上工作正常。但是当我在 中运行程序时,出现此错误:

Caused by: java.util.regex.PatternSyntaxException: Unclosed character class near index 28
[_]?([a-zA-Z0-9_]+)=("[^]*"),
Run Code Online (Sandbox Code Playgroud)

另一个问题是,我如何格式化正则表达式,以便我也可以将它与此字符串匹配?

MyKey="ID IN [ "ABC" ]",  // without the _
_MyKey="ID IN [ "ABC" ]",  // with the _
Run Code Online (Sandbox Code Playgroud)

谢谢。

[编辑]

你能帮我解答这部分问题吗?

另一个问题是,我如何格式化正则表达式,以便我也可以将它与此字符串匹配?

MyKey="ID IN [ "ABC" ]", // 不带 _ _MyKey="ID IN [ "ABC" ]", // 带 _

Lee*_*dor 5

这部分:

[^]
Run Code Online (Sandbox Code Playgroud)

要么需要

[\\^]*
Run Code Online (Sandbox Code Playgroud)

如果您正在寻找零或帽子字符的序列。(请注意,第一个反斜杠是为了告诉 Java 字符串解析器第二个反斜杠需要保留在字符串中。最终结果是正则表达式解析器只看到一个反斜杠,并用它来表示帽子字符需要成为其中的一部分方括号标识的字符类。)

或者你错过了一些你不想要的东西:

[^b]*
Run Code Online (Sandbox Code Playgroud)

匹配零个或多个非 b 字符

考虑你想匹配什么,尝试[^"]*或者只是.*

如果确实需要匹配跨行结尾,请使用.*和 放在?s正则表达式的前面以强制 java 正则表达式匹配器进入允许点匹配包括换行符在内的所有字符的模式。

感谢@TimPietzcker 的 javascript 注释。这表明在线工具不是Java正则表达式检查器,而可能是javascript正则表达式检查器。