【发布时间】:2017-01-17 09:35:00
【问题描述】:
我的代码要求我将正则表达式字符串存储在 JSON 中。这适用于大多数模式,但在使用带有“/”的日期模式时会遇到麻烦
我尝试用 '\' 转义
(\\d{1,2}\/\\d{1,2}\/\\d{1,2}) 这似乎工作正常,因为 JSONLint 确实给出了任何错误
然而挑战在于,当我尝试在 JAVA 程序中解析 JSON 字符串时,它会给出错误,因为它还需要转义“\”和“/”。我尝试了多种选择,但无法解决
【问题讨论】:
我的代码要求我将正则表达式字符串存储在 JSON 中。这适用于大多数模式,但在使用带有“/”的日期模式时会遇到麻烦
我尝试用 '\' 转义
(\\d{1,2}\/\\d{1,2}\/\\d{1,2}) 这似乎工作正常,因为 JSONLint 确实给出了任何错误
然而挑战在于,当我尝试在 JAVA 程序中解析 JSON 字符串时,它会给出错误,因为它还需要转义“\”和“/”。我尝试了多种选择,但无法解决
【问题讨论】:
我认为您提出的正则表达式过多地转义了反斜杠:看看: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)
【讨论】:
如果你有这样的表达方式
\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}
【讨论】: