繁体   English   中英

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

[英]java.util.regex.PatternSyntaxException: Unclosed character class near index

我在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正则表达式匹配器进入允许点匹配所有字符(包括换行符)的模式。

感谢@TimPietzcker的javascript笔记。 这表明在线工具不是Java正则表达式检查程序,但可能是一个javascript正则表达式检查程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM