当前位置: 首页 > 知识库问答 >
问题:

Java语言util。正则表达式。PatternSyntaxException:索引附近未关闭的字符类

柴嘉禧
2023-03-14

我正在用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 ]

我用在线regex助手尝试了它,我的regex实际上工作得很好。但当我在中运行程序时,会出现以下错误:

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" ]", // _

共有1个答案

祁杰
2023-03-14

这部分:

[^]

需要

[\\^]*

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

或者您缺少了一些您不想要的东西,例如:

[^b]*

匹配零个或多个非b字符

考虑到您想要匹配的内容,请尝试,或者只是

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

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

 类似资料: