繁体   English   中英

正则表达式中的(DEFINE)功能在Java中不起作用

[英](DEFINE) feature in regex does not work in Java

我试图使用正则表达式验证JSON字符串。 从另一篇文章中找到了有效的正则表达式https://stackoverflow.com/a/3845829/7493427它在正则表达式中使用了DEFINE功能。 但我认为JRegex库不支持该功能。 有没有解决这个问题?

我首先使用了java.util.regex,然后找到了关于JRegex库的内容。 但这也行不通。

String regex = "(?(DEFINE)" +
"(?<number>   -? (?= [1-9]|0(?!\\d) ) \\d+ (\\.\\d+)? ([eE] [+-]? 
\\d+)? )" +
"(?<boolean>   true | false | null )" +
"(?<string>    \" ([^\"\\n\\r\\t\\\\\\\\]* | \\\\\\\\ 
[\"\\\\\\\\bfnrt\\/] | \\\\\\\\ u [0-9a-f]{4} )* \" )" +
"(?<array>     \\[  (?:  (?&json)  (?: , (?&json)  )*  )?  \\s* 
\\] )" +
"(?<pair>      \\s* (?&string) \\s* : (?&json)  )" +
"(?<object>    \\{  (?:  (?&pair)  (?: , (?&pair)  )*  )?  \\s* 
\\} )" +
"(?<json>   \\s* (?: (?&number) | (?&boolean) | (?&string) | (? 
&array) | (?&object) ) \\s* )" +
")" +
"\\A (?&json) \\Z";
String test = "{\"asd\" : \"asdasdasdasdasdasd\"}";
jregex.Pattern pattern = new jregex.Pattern(regex);
jregex.Matcher matcher = pattern.matcher(test);
if(matcher.find()) {
    System.out.println(matcher.groups());
}

我期望匹配,因为测试json是有效的,但我得到一个例外。

线程“main”中的异常jregex.PatternSyntaxException:条件expr中的未知组名:jregex.Term.makeTree(Term.java:360)的jregex.Term.makeTree(Term.java:360)中的DEFINE,位于jregex.Term。 makeTree(Term.java:206)位于jregex.Pattern的jregex.Pattern.compile(Pattern.java:164)。(Pattern.java:150)位于com.cloak的jregex.Pattern。(Pattern.java:108)。 utilities.regex.VariableValidationHelper.main(VariableValidationHelper.java:305)

您可以使用这个相当简单的Jackson设置:

private static final ObjectMapper MAPPER = new ObjectMapper();

public static boolean isValidJson(String json) {
    try { 
        MAPPER.readValue(json, Map.class);
        return true;
    } catch(IOException e) {
        return false;
    }
}

当输入无效时, ObjectMapper#readValue()将抛出JsonProcessingExceptionIOException的子类)。

暂无
暂无

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

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