我很难用字符串中的日期和时间读取字符串:
YYYYMMDDHHmmSS.FFFF[+|-]ZZzz
YYYY
是一年,MM
是月份(从01到12开始),DD
是白天(01-31),HH
是小时(00-23),mm
分钟(00-59),SS
排名第二(00-59),FFFF
是秒的分数(0000-9999),ZZzz
是“小时差异(ZZ - 值从+14到-12)和”
协调世界时的分钟数(zz - 值00到59)
(UTC)。“这是在HL7中传输日期时间信息的标准,但不要担心。我遇到的问题是处理我为此标准编写的正则表达式的系统拒绝让我在第二个字段后添加点。它也不允许在ZZ字段之前加或减。
这是我写的正则表达式:
/^(1|2)\\d{3}(0[1-9]|1[0-2])(0[1-9]|(1|2)[0-9]|3(0|1))((0|1)[0-9]|2[0-3])[0-5][0-9][0-5][0-9]\\.\\d{4}((\\+|\\-)0[0-9]|\\-1[0-2]|\\+1[0-4])[0-5][0-9]$/
它用于Limesurvey,用于给定问题的验证字段。如果你不知道那是什么,只要知道它的正则表达式使用Perl约定。
请注意,如果我删除\。或\ + \ - ,它可以正常工作(除了正则表达式不再强制执行标准)。我也尝试过没有逃避反斜杠,但这也没有做任何事情。
如果有人能指出为什么这不起作用,我将不胜感激。请注意,如果正则表达式中的任何内容看起来很奇怪或多余,那么我最有可能从逻辑上将其分解为各个字段以便于阅读。
答案 0 :(得分:1)
我几乎没有改变你的正则表达式直到+14到-12部分。我不是很完全你可以看到它在这里工作:http://www.regex101.com/r/jF1bA9
最终正则表达式:
^(1|2)[0-9]{3}(0[1-9]|1[0-2])((0[1-9])|((1|2)[0-9])|3(0|1))((0|1)[0-9]|2[0-3])([0-5][0-9])([0-5][0-9])\.[0-9]{4}(\+0[0-9]|\+1[0-4]|-0[0-9]|-1[0-2])[0-5][0-9]$
正则表达式解释:
开始行:
^
//行首
年份:
(1|2)[0-9]{3}
月:
(0[1-9]|1[0-2])
天:
((0[1-9])|((1|2)[0-9])|3(0|1))
小时
((0|1)[0-9]|2[0-3])
分:
([0-5][0-9])
秒:
([0-5][0-9])
期间:
\.
第二部分:
[0-9]{4}
匹配+14到-12 (您可能需要更改的内容)
(\+0[0-9]|\+1[0-4]|-0[0-9]|-1[0-2])
件: +14 +13 +12 +11 +10 +09 +08 +07 +06 +05 +04 +03 +02 +01 +00 -00 -01 -02 -03 -04 -05 -06 -07 -08 -09 -10 -11 -12
00 - 59:
[0-5][0-9]
行尾:
$
您可能需要更改它以使用您的特定语言(我看到您在\\d
等某些区域有双反斜杠)