我正在用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));
}

我想使我的正则表达式匹配这些样本值。
_MyKey="ID IN [ "ABC" ]",  // Note - it has a comma after the ]
_MyKey="ID IN [ ""XYZ"" ]",   // Note - it has a comma after the ]

我使用在线正则表达式帮助程序进行了尝试-我的正则表达式实际上运行良好。但是当我在中运行程序时,出现此错误:
Caused by: java.util.regex.PatternSyntaxException: Unclosed character class near index 28
[_]?([a-zA-Z0-9_]+)=("[^]*"),

另一个问题是,我该如何格式化正则表达式,以便也可以将此字符串与之匹配?
MyKey="ID IN [ "ABC" ]",  // without the _
_MyKey="ID IN [ "ABC" ]",  // with the _

谢谢。

[编辑]

您能帮我解决这部分问题吗?

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

MyKey =“ID IN [” ABC“]”,//不带_
_MyKey =“ID IN [” ABC“]”,//与_

最佳答案

这部分:

[^]

需要要么
[\\^]*

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

或者,您丢失了不需要的东西,例如:
[^b]*

匹配零个或多个非b字符

考虑到您要匹配的内容,请尝试[^"]*或仅.*
如果确实需要跨行匹配,请使用.*并将?s放在正则表达式的前面,以强制Java regex匹配器进入允许点匹配所有字符(包括换行符)的模式。

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

09-30 17:31
查看更多