我正在用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 正则表达式检查器。