簡體   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