- 目標:構造能夠被如下正則表達式匹配的字符串
^(?:\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[\+\-]\d{2}:\d{2}))$
-
初步嘗試
第一眼看到這個正則表達式,發現可以試着輸入2020-10-10T12:12:12.123進行匹配,結果發現匹配錯誤,因爲後面還有一部分規則未匹配上。但是當前對從“?(Z|”開始的部分不知其意。
-
語法學習
序號 符號 意義 1 ^ 表達式匹配起始標識 2 & 表達式匹配結束標識 3 ?: 匹配後續表達式,但不獲取匹配結果 4 \d 數字 5 {4} 需要提供4個字符 6 \. 標識字符"." 7 \d+ 匹配任意長度數字 8 ? 匹配零次或一次 9 | 或操作,如A|B,表示從A或B中選擇一個進行匹配 10 [\+\-] 匹配符號"+“或”-" -
生成正確字符串
根據上述語法,構建如下字符串都可以通過該表達式的匹配:
(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
-
小結
這個表達式最關鍵的就是“?(Z|”開始的部分,從時間的表達格式上也可以進行理解:一個時間如果沒有誤差,則在其後加入"Z"進行標識;如果有誤差,則加入"+/-"符號連同誤差時間進行標識。