[英]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 world
或goodbye world
。
(?<offset>Z|[+-]\d{2}:\d{2})?
不過,特別是為了解析日期時間,我建議您to_time
DateTime.parse
(如果需要一個Time實例,請加上to_time
)。 如果那還不夠靈活,那就考慮一下慢性寶石。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.