我很难在字符串中读到日期和时间的格式:
YYYYMMDDHHmmSS.FFFF[+|-]ZZzzYYYY是一年,MM是一个月(从01到12开始),DD是日(01-31),HH是小时(00-23),mm是分钟(00-59),SS是第二名(00-59),FFFF是第二个(0000-9999)的分数,ZZzz是“与协调的世界时间(UTC)的小时差(ZZ -值从+14到-12)和分钟(zz -值从00到59)”。这是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约定即可。
请注意,如果我删除了.或+ -,它就能正常工作(除了regex不再强制执行标准外)。我也试过不逃避反斜杠,但这也无济于事。
如果有人能指出这不起作用的原因,我会很感激的。请注意,如果正则表达式中有任何东西看起来很奇怪或多余,这很可能是我从逻辑上将其分解到各个字段中,以便更容易阅读。
发布于 2013-01-17 01:13:20
我几乎没有改变你的正则表达式直到+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 +02 +01 +00 -01 -02 -03 -04 -05 -06 -07 -08 -10 -11 -12
00 - 59:
[0-5][0-9]
终点站:
$
您可能需要更改它以使用特定的语言(我看到您在某些领域(如\\d)有双反斜杠)。
https://stackoverflow.com/questions/14368825
复制相似问题