首頁·正規表示式
廣告

加密貨幣交易所註冊優惠

只要註冊就能領取的優惠。條件皆依各交易所公告原樣列出。

正規表示式 133 例

從寫法本身,到電子郵件、日期、位址的檢查。每個式子都配了該符合的例子和不該符合的例子,而且測試每次都真的跑一遍。

寫法36

規定怎樣指向單個字元的寫法。其餘一切都從這裡開始。

重複與分組24

規定重複多少次,以及把哪一段看作一個整體。

前後查看14

只查看前後有什麼,並不把它吃掉。疊加條件時用得上。

整串檢查66

兩端都錨住,整個字串合上才算通過。輸入檢查用的就是這類。

^[^\s@]+@[^\s@.]+(?:\.[^\s@.]+)+$一個電子郵件位址^https?://[^\s/$.?#][^\s]*$一個網址^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,}$一個網域名稱^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)$一個 IPv4 位址^(?:[0-9a-f]{1,4}:){7}[0-9a-f]{1,4}$不省略寫全的 IPv6 位址^(?:[0-9a-f]{2}[:-]){5}[0-9a-f]{2}$一個 MAC 位址^(?:6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]?\d{1,4})$一個連接埠號^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$一個 UUID^#(?:[0-9a-f]{3}|[0-9a-f]{6})$十六進位色碼^rgb\(\s*\d{1,3}\s*,\s*\d{1,3}\s*,\s*\d{1,3}\s*\)$rgb() 形式的色彩值^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$ISO 格式的日期^(?:0[1-9]|[12]\d|3[01])/(?:0[1-9]|1[0-2])/\d{4}$用斜線寫的日期^(?:[01]\d|2[0-3]):[0-5]\d$24 小時制的時刻^(?:0?[1-9]|1[0-2]):[0-5]\d\s?(?:am|pm)$帶 am/pm 的時刻^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$完整的 ISO 時間戳記^P(?=\d|T\d)(?:\d+Y)?(?:\d+M)?(?:\d+D)?(?:T(?:\d+H)?(?:\d+M)?(?:\d+S)?)?$ISO 格式的時間長度^\d+\.\d+\.\d+(?:-[0-9a-z.-]+)?(?:\+[0-9a-z.-]+)?$語意化版本號^\d+$不帶符號的整數^[+-]?\d+$可以帶符號的整數^-?\d+(?:\.\d+)?$可以帶小數部分的數^-?\d+(?:\.\d+)?[eE][+-]?\d+$用科學記數法寫的數^(?:100(?:\.0+)?|\d{1,2}(?:\.\d+)?)%$0 到 100 之間的百分比^\d{1,3}(?:,\d{3})*$每三位打一個逗號的數^[$€£¥₩]\s?\d{1,3}(?:,\d{3})*(?:\.\d{2})?$帶貨幣符號的金額^[0-9a-f]+$十六進位字串^[01]+$只由 0 和 1 組成的字串^[0-7]+$八進位字串^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$base64 編碼的字串^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]*$由兩個點分成三段的 JWT^\+[1-9]\d{7,14}$國際標準格式的電話號碼^[a-z][a-z0-9_]{2,15}$以字母開頭的使用者名稱^[a-z0-9]+(?:-[a-z0-9]+)*$用在網址裡的連字詞^[^\\/:*?"<>|]+\.[a-z0-9]+$帶副檔名的檔名^.+\.(?:jpe?g|png|gif|webp|avif|svg)$圖片檔案的副檔名^/(?:[^/\0]+/)*[^/\0]*$Unix 風格的路徑^[A-Za-z]:\\(?:[^\\/:*?"<>|]+\\)*[^\\/:*?"<>|]*$Windows 路徑^</?[a-z][a-z0-9]*(?:\s[^<>]*)?/?>$單個 HTML 標籤^\.-?[_a-z][_a-z0-9-]*$CSS 類別選擇器^M{0,3}(?:CM|CD|D?C{0,3})(?:XC|XL|L?X{0,3})(?:IX|IV|V?I{0,3})$羅馬數字^-?(?:90(?:\.0+)?|[1-8]?\d(?:\.\d+)?)$緯度值^-?(?:180(?:\.0+)?|1[0-7]\d(?:\.\d+)?|\d{1,2}(?:\.\d+)?)$經度值^(?:0|[1-9]\d*)$開頭不帶 0 的數^\d*[02468]$偶數^\s*$一行空白^\d{4}-W(?:0[1-9]|[1-4]\d|5[0-3])$ISO 週編號,最多到第 53 週^#(?:[0-9a-f]{4}|[0-9a-f]{8})$帶透明度的十六進位顏色^\d{4}(?:[ -]?\d{4}){3}$按四位一組寫成四組的卡號^[A-Z]{3}$三個大寫字母的貨幣代碼^0x[0-9a-f]+$以 0x 開頭的十六進位數^[0-9a-f]{64}$六十四個字元的雜湊值^[0-9a-f]{24}$二十四個字元的文件編號^\d{5}$五位郵遞區號^[A-Z]{2}$兩位字母國家代碼^(\d{1,3}\.){3}\d{1,3}/\d{1,2}$帶網段前綴的 IPv4 位址^01[016789]-?\d{3,4}-?\d{4}$韓國手機號碼^[가-힣]{2,5}$兩到五個字的諺文姓名^\d{5}(-\d{4})?$美國郵遞區號^([0-9a-fA-F]{1,4}(:[0-9a-fA-F]{1,4})*)?::([0-9a-fA-F]{1,4}(:[0-9a-fA-F]{1,4})*)?$縮寫的 IPv6 位址^\d{3}-\d{2}-\d{5}$韓國營業執照號碼^[a-z]+\/[a-zA-Z0-9][a-zA-Z0-9.+-]*$MIME 類型^data:[a-z]+\/[a-z0-9.+-]+;base64,[A-Za-z0-9+/]+=*$base64 形式的 data: URI^(\S+\s+){4}\S+$五段式 cron 運算式^[A-Za-z]:\\.*$Windows 磁碟機路徑^[\^~]?\d+\.\d+\.\d+$帶 ^ 或 ~ 的版本範圍^(10\.\d{1,3}\.\d{1,3}\.\d{1,3}|192\.168\.\d{1,3}\.\d{1,3}|172\.(1[6-9]|2\d|3[01])\.\d{1,3}\.\d{1,3})$私有 IPv4 網段^[A-Z][a-zA-Z0-9]*$帕斯卡命名

擷取與清理49

用來從一段文字裡只挑出、或只刪掉需要的那部分。

\s+$行尾留下的空格^\s+行首的空格^\s+|\s+$前後兩端的空格\s{2,}連著兩個以上的空格\n\s*\n兩行之間的空行\D+不是數字的部分[^\x00-\x7F]ASCII 之外的字元[\x00-\x1F]看不見的控制字元</?[^>]+>文字裡的 HTML 標籤<!--[\s\S]*?-->HTML 註解//.*$以兩個斜線開頭的註解/\*[\s\S]*?\*/跨越多行的註解"[^"\\]*(?:\\.[^"\\]*)*"雙引號裡的內容'[^'\\]*(?:\\.[^'\\]*)*'單引號裡的內容\[([^\]]+)\]\(([^)]+)\)Markdown 連結^#{1,6}\s+.+$Markdown 標題行(?:^|\s)#([a-z0-9_]+)主題標籤(?:^|\s)@([a-z0-9_]{2,})用 @ 提到的名字[?&]([^=&]+)=([^&]*)網址問號後面的參數https?://[^\s<>"]+夾在正文裡的網址^https?://([^/:?#]+)從網址裡只取網域名稱\.([a-z0-9]+)$檔名的副檔名(?<=[a-z0-9])(?=[A-Z])駝峰寫法裡詞與詞的接縫_([a-z])底線後面的那個字母-([a-z])連字號後面的那個字母(?:^|,)("(?:[^"]|"")*"|[^,]+)用逗號分開的一個欄位^([^=]+)=(.*)$用等號分開的名字和值^\s*(\S+)第一個詞(\S+)\s*$最後一個詞\d+文字裡成串的數字\b\w+\b一個一個詞\[([^\]]*)\]方括號裡的內容\(([^)]*)\)圓括號裡的內容[\uD800-\uDBFF][\uDC00-\uDFFF]占兩個碼元的表情符號(.)\1{2,}同一個字元出現三次以上,\s*([}\]])閉合括號前多出來的逗號\*\*([^*]+)\*\*用兩個星號包住的粗體`([^`]+)`用反引號包住的程式碼(\w+)="([^"]*)"值放在雙引號裡的屬性\x1b\[[0-9;]*m改變終端機顏色的跳脫碼from ['\"]([^'\"]+)['\"]import 陳述式裡的路徑#[0-9a-fA-F]{6}\b正文裡的十六進位色碼TODO:?\s*(.*)註解裡留下的待辦\d+(px|em|rem|%)帶 CSS 單位的數字!\[([^\]]*)\]\(([^)]+)\)Markdown 圖片^[-*+]\s+(.+)$Markdown 列表項--[^\n]*SQL 單行註解\$\{?([A-Z_][A-Z0-9_]*)\}?Shell 環境變數[A-Za-z0-9_-]{11}YouTube 影片 ID

怎麼看這一頁

  • 兩端加上 ^ 和 $,整個字串就必須合上;不加,比對落在文中任何位置都行。用來做輸入檢查的式子,一定要加錨。
  • 圓括號 ( ) 會把括住的部分擷取下來。只是想分組的話寫成 (?: ),後面各組的編號才不會往後挪。
  • 這裡的每個式子都拿它自己的例子跑過。不過「長得像電子郵件」和「真有這個信箱」始終是兩回事。
  • 開放式重複層層巢狀(比如 (a+)+)時,遇到某些輸入耗時會爆炸式增長。把別人的式子貼進程式前,先找找有沒有這種形狀。

常見問題

Q什麼是正規表示式?

它是一門小語言,用來描述你想在文字裡找的「形狀」。寫 \d{4} 而不是「四位數字」,程式就能找出每一處符合這個形狀的地方。JavaScript、Python、Java 等大多數語言用的寫法幾乎相同。

Q電子郵件的檢查式為什麼這麼短?

完全照標準寫的郵件式子長達數千字元,而且照樣說不出這個信箱是否真的存在。擋住手滑打錯,才是正規表示式能做的事;真正的確認只有寄一封驗證信。

Q為什麼同一個式子在各語言裡略有不同?

骨架一樣,細節不同。JavaScript 沒有 \A,Python 要單獨打開 re.MULTILINE。這裡列出的式子都是按在 JavaScript 裡原樣能跑的形式寫的。

Q說式子可能很慢,是什麼意思?

像 (a+)+ 這樣開放式重複巢在一起時,遇到比對不上的輸入,回溯的路數會爆炸。這時哪怕很短的字串也可能耗上好幾秒,放在伺服器上很危險。

Q這裡的式子可信嗎?

每個式子都帶著「必須符合」和「必須不符合」兩組例子,測試會把 133 個全部真跑一遍。頁面上看到的例子就是測試用的例子,所以說明和式子不可能各走各的。