我正在编写一个正则表达式来匹配MySQL在分配给DATETIME列时接受的字符串。
正则表达式需要匹配这些字符串:
2016-07-12 06:32:.0001
2016-07-12 06::54.0001
2016-07-12 :32:54.0001
2016-07-12 ::.
但不应该匹配这些字符串:
/^
(\d+) # year
[[:punct:]]
(\d+) # month
[[:punct:]]
(\d+) # day
(?:
(?:T|\s+|[[:punct:]]) # seperator between date and time
(?:
(\d+) # hour
(?:
[[:punct:]]
(?:
(\d+) # minute
(?:
[[:punct:]]
(?:
(\d+) # second
(?:
\.
(\d+)? # microsecond
)?
)?
)?
)?
)?
)?
)?
$/xDs
也就是说,中间空间之后的所有部分都是可选的,但每个可选部分都取决于前一部分(正则表达式只能跳过剩余的部分直接结束)。 / p>
目前我有:
AREAS
有没有办法避免深层嵌套的群组?
由于
答案 0 :(得分:1)
您的问题的答案 - 如果您想在结果中保留捕获的值 - 是否。
为什么呢? Capturing repeated groups is not supported in PCRE。此外,如果您使用任何类型的(?:(PATTERN_BLOCK)PATTERN_BLOCK2){n}
,您将获得最终的PATTERN_BLOCK
值。如果您考虑(?(DEFINE)....)
,capturing groups inside that block are also reset以后就无法访问这些值。
这些带有“嵌套”捕获组的可选组正是您在这种情况下所需要的。