【问题标题】:How to store regex date pattern in JSON如何在 JSON 中存储正则表达式日期模式
【发布时间】:2017-01-17 09:35:00
【问题描述】:

我的代码要求我将正则表达式字符串存储在 JSON 中。这适用于大多数模式,但在使用带有“/”的日期模式时会遇到麻烦

我尝试用 '\' 转义

(\\d{1,2}\/\\d{1,2}\/\\d{1,2}) 这似乎工作正常,因为 JSONLint 确实给出了任何错误

然而挑战在于,当我尝试在 JAVA 程序中解析 JSON 字符串时,它会给出错误,因为它还需要转义“\”和“/”。我尝试了多种选择,但无法解决

【问题讨论】:

    标签: java json regex


    【解决方案1】:

    我认为您提出的正则表达式过多地转义了反斜杠:看看:https://regex101.com/r/xBFeZG/1

    只有在 java 正则表达式中需要转义的 \,所以我相信你想要的转换是:

     (\\d{1,2}\\/\\d{1,2}\\/\\d{1,4})
    

    但是,为什么不简单地使用标准日期格式(例如:dd/MM/yyyy -> 请参阅 https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html)并执行以下操作:

    LocalDate.parse(date, DateTimeFormatter.ofPattern(format)
    

    【讨论】:

      【解决方案2】:

      如果你有这样的表达方式

      \d{1,2}/\d{1,2}/\d{1,4}
      

      然后将其导出为 JSON 将产生类似的结果

      { "regex": "\\d{1,2}\/\\d{1,2}\/\\d{1,4}" }
      

      每个“\”都被转义为“\\”。

      要在 Java 中正确解析,您实际上只需要“取消转义”转义的反斜杠,换句话说,删除前导反斜杠。像这样的东西应该可以工作:

      String regex = jsonRegex.replaceAll("\\\\(.)", "$1");
      

      编辑:正斜杠实际上不需要转义,尽管转义它们并没有什么坏处。因此,表达式很可能会以 JSON 格式发出,例如

      \\d{1,2}/\\d{1,2}/\\d{1,4}
      

      【讨论】:

      • 我正在使用 SimpleDateFormat 转换为日期格式,但是正则表达式的需要是从随机文本中识别日期字段
      • @Vivek 太棒了!您的问题是关于从 JSON 解析正则表达式,而不是如何将日期从组件传递到组件。所以,我给你一个具体问题的答案,你去接受对方不相关的答案!!哦
      • 问题是关于当我试图解析包含日期模式的 json 时,它对我不起作用......如果它没有清楚地显示出来,我深表歉意。不过感谢您的回答。不幸的是只能选择一个答案,这对我来说完全有效
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-15
      • 1970-01-01
      相关资源
      最近更新 更多