java - 定义从 java 中的 json 字符串中提取多个日期的模式的问题

标签 java regex matcher

我有以下代码:

    public static void main(String[] args) {
    String str = "{\"$and\":[{\\\"$or\\\":[{\\\"origen\\\":{\\\"$eq\\\":\\\"LEMD\\\"}},{\\\"origen\\\":{\\\"$eq\\\":\\\"LEBL\\\"}}]},{\"horasacta\":{\"$gte\":\"28/02/2015 00:00:00\"}},{\"horasacta\":{\"$lte\":\"28/02/2015 23:59:59\"}}]}";

    Pattern pattern = Pattern.compile("\\{\"(.*?)\":\\{\"\\$(.*?)\":\"[0-9]+/[0-9]+/[0-9]+ [0-9]+:[0-9]+:[0-9]+\"}}");
    Matcher matcher = pattern.matcher(str);
    while (matcher.find()) {
        System.out.println(matcher.group(0));
    }

我想获取子字符串:

{\"departure\":{\"$gte\":\"28/02/2015 00:00:00\"}}
{\"departure\":{\"$lte\":\"28/02/2015 23:59:59\"}}

但是程序给了我:

{"$and":[{\"$or\":[{\"origin\":{\"$eq\":\"LEMD\"}},{\"origin\":{\"$eq\":\"LEBL\"}}]},{"departure":{"$gte":"28/02/2015 00:00:00"}}
{"departure":{"$lte":"28/02/2015 23:59:59"}}

第二次 find() 与模式匹配,但第一次它没有完成这项工作。

有什么帮助吗?

谢谢

最佳答案

这是不受欢迎的,但如果你必须这样做,我猜你可能会尝试编写一个看起来有点像的表达式:

{\\"([^\\]+)\\":{\\"\$([^\\]+)\\":\\"[0-9]+\/[0-9]+\/[0-9]+\s+[0-9]+:[0-9]+:[0-9]+\\"}}

不过不太确定。

<小时/>

该表达式在 regex101.com 的右上角面板中进行了解释,如果您想探索/简化/修改它,请在this link中,如果您愿意,您可以观察它如何与一些示例输入匹配。

测试

import java.util.regex.Matcher;
import java.util.regex.Pattern;

final String regex = "\\{\\\\\"([^\\\\]+)\\\\\":\\{\\\\\"\\$([^\\\\]+)\\\\\":\\\\\"[0-9]+\\/[0-9]+\\/[0-9]+\\s+[0-9]+:[0-9]+:[0-9]+\\\\\"\\}}";
final String string = "{\\\"departure\\\":{\\\"$gte\\\":\\\"28/02/2015 00:00:00\\\"}}\n"
     + "{\\\"departure\\\":{\\\"$lte\\\":\\\"28/02/2015 23:59:59\\\"}}";

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    System.out.println("Full match: " + matcher.group(0));
    for (int i = 1; i <= matcher.groupCount(); i++) {
        System.out.println("Group " + i + ": " + matcher.group(i));
    }
}

关于java - 定义从 java 中的 json 字符串中提取多个日期的模式的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57173097/

相关文章:

Javascript 正则表达式验证不太有效

regex - 如何确保正则表达式匹配模式的一次出现

lisp - 匹配器关联列表 lisp

java - 模式java : 2 caracters less than n times and their sum of appereance less n too

java - <context :annotation-config> and <context:component-scan> 之间的区别

java - 需要将 Visual Basic .NET 代码移植到 Java

java - 如何在准备好的语句java中使用特殊字符

php - 如何在 php 正则表达式中使用半空格 (unicode U+2005)

java - 在另一个字符串中查找某个字符串并计算它出现的次数

java - 添加路径到java构建