【发布时间】:2017-02-16 00:49:12
【问题描述】:
我一直在处理需求,我需要在以下字符串上创建一个正则表达式:
startDate:[2016-10-12T12:23:23Z:2016-10-12T12:23:23Z]
此字符串可以有多种变体,如下所示:
startDate:[*;2016-10-12T12:23:23Z]
startDate:[2016-10-12T12:23:23Z;*]
startDate:[*;*]
上面表达式中的 startDate 是一个键名,可以是 endDate、updateDate 等任何内容,这意味着我们不能在表达式中对其进行硬编码。虽然[a-zA-Z_0-9]*
我正在使用以下编译模式
Pattern.compile("([[a-zA-Z_0-9]*):(\\[[[\\*]|[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}[Z]];[[\\*]|[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}[Z]]\\]])");
模式匹配,但创建的组不是我所期望的。我想要下面括号括起来的组:
(startDate):([*:2016-10-12T12:23:23Z])
group1 = "startDate"
group2 = "[*;2016-10-12T12:23:23Z]"
能否请您帮我正确表达 Java 和组?
【问题讨论】:
-
but the groups created are not what I expect.... 目前有哪些群组? -
dateMatcher.group(0) = "s" dateMatcher.group(1) = "s" @TimBiegeleisen
-
startDate:[*:*]你能把这个缩小一点吗?如果您愿意接受冒号两侧的时间戳,甚至检查冒号两侧的时间戳也没有意义。 -
@TimBiegeleisen 我必须提取冒号周围的时间戳,以便稍后进行一些日期范围比较。你建议如何缩小范围?
-
如果没有出现时间戳,那里还会出现什么?您至少需要半固定结构才能在此处编写健壮的正则表达式。
标签: java regex regex-group