解析:一個用於匹配特定日期格式的正則表達式

  1. 目標:構造能夠被如下正則表達式匹配的字符串
^(?:\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[\+\-]\d{2}:\d{2}))$
  1. 初步嘗試

    第一眼看到這個正則表達式,發現可以試着輸入2020-10-10T12:12:12.123進行匹配,結果發現匹配錯誤,因爲後面還有一部分規則未匹配上。但是當前對從“?(Z|”開始的部分不知其意。

  2. 語法學習

    序號 符號 意義
    1 ^ 表達式匹配起始標識
    2 & 表達式匹配結束標識
    3 ?: 匹配後續表達式,但不獲取匹配結果
    4 \d 數字
    5 {4} 需要提供4個字符
    6 \. 標識字符"."
    7 \d+ 匹配任意長度數字
    8 ? 匹配零次或一次
    9 | 或操作,如A|B,表示從A或B中選擇一個進行匹配
    10 [\+\-] 匹配符號"+“或”-"
  3. 生成正確字符串

    根據上述語法,構建如下字符串都可以通過該表達式的匹配:

    (1) 2020-05-05T10:20:30.123Z

    (2) 2020-05-05T10:20:30.123+10:10

    (3) 2020-05-05T10:20:30.123-10:10

  4. 小結

這個表達式最關鍵的就是“?(Z|”開始的部分,從時間的表達格式上也可以進行理解:一個時間如果沒有誤差,則在其後加入"Z"進行標識;如果有誤差,則加入"+/-"符號連同誤差時間進行標識。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章