繁体   English   中英

Ruby Regex:如何在方括号内匹配(命名)组?

[英]Ruby Regex: How to match (named) groups inside square brackets?

我正在尝试用Ruby写一个正则表达式,它将解析各种日期/时间格式。 整个正则表达式如下所示:

/^(?<year>\d{4})\-(?<month>\d{2})\-(?<day>\d{2})(T(?<hour>\d{2})(:(?<minute>\d{2})(:(?<second>\d{2}(\.\d{1,3})?))?)?)?(?<offset>[+-]\d{2}:\d{2})?$/

我正在使用命名组,以便可以使用简单的名称(例如“ year”,“ month”,“ day”等)从匹配对象中提取匹配的部分。此regex可以正常工作,但我们专注于最后的“偏移”:

(?<offset>[+-]\d{2}:\d{2})?

问题是我试图在字符串末尾添加解释“ Z”的功能,以表示UTC时间(又名Zulu时间)。 此“ Z”应与偏移量互斥。 这是我尝试过的一些方法:

(?<offset>[Z([+-]\d{2}:\d{2})])?
(?<offset>[(Z)([+-]\d{2}:\d{2})])?
[(?<zulu>Z)(?<offset>[+-]\d{2}:\d{2})]?

这些都不起作用。 在前两种情况下,它可以解释以“ Z”结尾的日期字符串,但是它不再能够解释以“ -07:00”之类的实际偏移量结尾的日期字符串。 在第三种情况下,匹配对象中完全缺少命名的组“ zulu”和“ offset”。

我认为此问题是因为我正在尝试使用方括号来表示[(ThisGroup)(OrThisGroup)]? 但是我不认为正则表达式引擎喜欢在方括号内包含组。 我如何告诉正则表达式引擎允许并捕获“ A组或B组,或两者都不是,但不能同时捕获”?

方括号用于“恰好是这些字符中的任何一个” –这不是您所需要的。 模式级别的交替是通过| 运算符: (hello|goodbye) world将匹配hello worldgoodbye world

(?<offset>Z|[+-]\d{2}:\d{2})?

不过,特别是为了解析日期时间,我建议您to_time DateTime.parse (如果需要一个Time实例,请加上to_time )。 如果那还不够灵活,那就考虑一下慢性宝石。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM