gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:07:08 25 4
gpt4 key购买 nike

我正在尝试使用正则表达式验证 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 有效,但出现异常。

Exception in thread "main" jregex.PatternSyntaxException: unknown group name in conditional expr.: DEFINE at jregex.Term.makeTree(Term.java:360) at jregex.Term.makeTree(Term.java:219)at jregex.Term.makeTree(Term.java:206) at jregex.Pattern.compile(Pattern.java:164) at jregex.Pattern.(Pattern.java:150) at jregex.Pattern.(Pattern.java:108) at com.cloak.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() 当输入无效时将抛出 JsonProcessingException(IOException 的子类)。

关于java - 正则表达式中的 (DEFINE) 功能在 Java 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55935397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com