Skip to content
正規表示式速查表
Tools

正規表示式速查表

可搜尋的正規表示式符號與旗標參考。

Live regex tester

Type a pattern and a test string — matches highlight instantly, with every capture group broken out below.

/ /
Flags
Matches
Capture groups

Common regex patterns

Battle-tested patterns — load one into the tester to see it run, or copy it straight out.

Email address
[\w.+-]+@[\w-]+\.[\w.-]+
URL (http/https)
https?:\/\/[^\s]+
US phone number
\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}
Date (YYYY-MM-DD)
(\d{4})-(\d{2})-(\d{2})
Time (24-hour)
([01]?\d|2[0-3]):[0-5]\d
IPv4 address
\b(?:\d{1,3}\.){3}\d{1,3}\b
Hex color
#(?:[0-9a-fA-F]{6}|[0-9a-fA-F]{3})\b
Slug / username
[a-z0-9]+(?:-[a-z0-9]+)*
Whole number / integer
-?\d+
Strong password (8+, mixed)
(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}
Duplicate word
\b(\w+)\s+\1\b
Trailing whitespace
[ \t]+$

Regex cheat sheet

Every token, grouped with a quick example. Search by symbol or keyword; click any token to copy it.

Regex flavors: JavaScript, Python, Java, PCRE & grep

The tester above runs JavaScript regex. Most syntax is shared — here's what differs between engines.

FeatureJavaScriptPython (re)JavaPCRE / grep
Named group(?<name>…)(?P<name>…)(?<name>…)(?P<name>…)
Dotall (. matches \n)s flagre.DOTALL / (?s)Pattern.DOTALL(?s)
Ignore casei flagre.IGNORECASE / (?i)(?i) flag(?i) / grep -i
Lookbehind(?<=…) ES2018+SupportedSupportedgrep -P only
Backslash in source/\d/ literalr"\d" raw string"\\d" doubled\d
Find every matchstr.matchAll(/…/g)re.findall()Matcher.find()grep -o
POSIX class [[:digit:]]use \d insteaduse \d insteadsupportedsupported

Runs entirely in your browser. Nothing is uploaded.

正規表達式速查表 — 附範例與即時測試器

這份 正規表達式速查表 讓你隨時查詢每一個 regex 語法符號,並搭配 即時測試器,讓你查到語法後立刻驗證。輸入模式、選擇旗標、貼上測試字串,符合的部分即時高亮顯示,每個捕獲群組也會分別列出。

無需安裝、無需建立帳號:整個 正規表達式參考手冊 完全在瀏覽器中運行,你輸入的文字不會被上傳。沒有廣告、沒有登入牆,測試字串也沒有大小限制。

所有 regex 語法符號,分類附範例

參考手冊涵蓋你最常用到的語法:字元類別\d\w\s 及自訂集合如 [a-z])、錨點與邊界^$\b)、量詞*+?{n,m} 及其惰性形式)、群組與選擇前視與後視斷言旗標 g i m s u y,以及匹配原始點和斜線所需的跳脫符號。

每個語法項目都附有簡短具體的範例 — 例如 \bcat\b 可以匹配單字「cat」但不會匹配「category」— 讓你更容易記住用法。依符號或關鍵字搜尋 regex 語法符號,點一下即可複製。

邊建立模式邊即時測試

靜態速查表無法告訴你模式是否真的能運作。內建的 regex 測試器 會即時編譯你的表達式、在範例文字中高亮每個符合項目,並列出每個符合結果的編號與命名捕獲群組。

切換全域、不區分大小寫、多行、dotall、Unicode 和 sticky 旗標,立即觀察結果變化。如果模式無效,你會看到清楚的錯誤訊息,而不是靜默失敗 — 即時看到模式符合的結果,是學習 regex 最快的方式。

常用 regex 模式,隨時複製使用

有些模式反覆出現 — 電子郵件地址、網址、電話號碼、ISO 日期、IPv4 位址、十六進位顏色與強密碼檢查。「常用模式」區段為你提供每種模式的精選版本:直接載入測試器查看範例文字的執行效果,或複製到你的程式碼中使用。

這些都是務實的起點,讓你依需求調整,而非一成不變的通用規則 — 這正是在你自己的資料上測試它們的原因。

與 regex101.com 和 regexr.com 的比較

regex101.com 是網路上最受歡迎的專用 regex 工具 — 確實名副其實。它支援六種 regex 方言(PCRE、Python re、Golang、Java、.NET 和 JavaScript),顯示逐符號說明面板,並記錄符合歷程。如果你在除錯複雜的正式環境模式,或需要確認某個模式在 PHP 和 Python 中行為完全一致,regex101 正是你所需的工具。regexr.com 提供類似的體驗,並擁有公開的社群模式庫。

這個 UtiloKit 頁面的定位不同。它將 可搜尋的語法符號參考表 與即時測試器整合在同一個畫面,專為「大概知道需要什麼,但記不住確切語法」這種常見情境而設計。你打開頁面、查詢語法符號、貼上快速測試字串,然後回到編輯器 — 不需要切換分頁、不需要帳號、沒有廣告。對於每天要開 regex101.com 好幾次只是為了確認後視斷言是用 (?<=…) 還是 (?<!…) 的開發者來說,有一個專用的可搜尋參考手冊確實快多了。兩者都用:regex101 用於深入除錯,這個頁面用於快速查詢。

Regex 方言:JavaScript、Python、Java、PCRE 與 grep

大多數 regex 語法是通用的,但各引擎在細節上有所不同。這裡的測試器使用 JavaScript regex,與 Node.js 和瀏覽器相同的方言。Pythonre 模組需要使用原始字串如 r"\d+",並以 (?P<name>…) 命名群組;Java 在字串字面量中需要雙重反斜線;PCRE(PHP 及 grep -P)是功能最完整的;POSIX grep -E 則有其特有的跳脫規則。

方言對照表列出了每個引擎在命名群組、dotall、不區分大小寫、後視斷言與「尋找全部」上的差異,讓你能夠將 Python regex 速查表的模式移植到 JavaScript — 或反向操作 — 都不會遇到意外。

貪婪 vs 惰性,以及其他常見陷阱

幾乎所有人都會踩到的兩個坑。第一,量詞是 貪婪的.+ 會盡可能多地匹配,所以要匹配單一 HTML 標籤,你通常需要使用 惰性的 .+?。第二,忘記跳脫元字元 — 單獨的 . 匹配任意字元,而 \. 匹配原始的點,所以價格的 regex 需要寫成 \d+\.\d{2}

工作時保持速查表開著,這些就不再是意外了。

私密、即時且免費

無需安裝,無需建立帳號。每次查詢、每次符合、每次複製都在你的瀏覽器本機執行 — 你的模式和測試資料永遠不會離開你的裝置。將這份 正規表達式速查表 加入書籤,每當需要回憶語法符號或快速驗證模式時隨時取用。

Frequently asked questions

正規表達式是什麼?可以舉個例子嗎?

正規表達式(regex)是一種描述一組字串的簡潔模式,用來搜尋、匹配和替換文字。例如,模式 \d{3}-\d{4} 可以匹配電話片段如 555-1234,因為 \d 表示「一個數字」,{3} 表示「恰好三個」。Regex 在幾乎每種程式語言和程式碼編輯器中都支援搜尋替換、表單驗證和日誌解析。本頁頂部的即時測試器讓你可以立即嘗試任何模式。

regex 基本語法符號有哪些?

基本組成元素包括:.(除換行符外的任意字元)、\d(數字)、\w(字組字元 — 字母、數字或底線)、\s(空白字元)、錨點 ^(開始)和 $(結束),以及量詞 *(零個或多個)、+(一個或多個)和 ?(可選)。所以 \w+ 匹配整個單字,\d+ 匹配整個數字如 2024。組合使用 — ^\d+$ 匹配只包含數字的行。本速查表上的每個語法符號都附有可複製的範例。

\d、\w 和 \s 是什麼意思?

\d 匹配任意數字 0–9;\w 匹配字組字元(a–z、A–Z、0–9 或 _);\s 匹配空白字元(空格、Tab 或換行)。它們的大寫版本是否定形式:\D 是非數字,\W 是非字組字元,\S 是非空白。例如,在文字「a5 b」中,\d 匹配 5,\w 匹配 a、5 和 b,\s 匹配它們之間的空格。這三個速記類別涵蓋了絕大多數日常 regex 模式。

regex 錨點是什麼?

錨點匹配的是位置而非字元。^ 匹配字串的開始(或使用 m 旗標時每行的開始),$ 匹配結束,\b 匹配字組邊界,\B 匹配非邊界。例如,^\d+$ 匹配只由數字組成的字串,\bcat\b 匹配單字「cat」但不匹配「category」中的「cat」。錨點常被誤解為字元匹配器 — 它們匹配的是文字中的位置,而非特定字元。

regex 量詞是什麼?

量詞指定前一個語法符號可以重複的次數:* 是零個或多個,+ 是一個或多個,? 是零個或一個(可選),{n} 是恰好 n 個,{n,} 是 n 個或更多,{n,m} 是 n 到 m 之間。它們預設是貪婪的(盡可能多地匹配);加上 ? 讓它們變成惰性的。例如 \d{1,3} 匹配 1 到 3 個數字,而惰性的 .+? 盡可能少地匹配。惰性量詞在匹配 HTML 標籤或引號字串時不可或缺。

群組和捕獲群組是什麼?

括號(…)建立一個可以提取或重用的捕獲群組 — (\d{4})-(\d{2}) 在「2024-06」中捕獲第 1 群組為年份,第 2 群組為月份。使用 (?:…) 建立非捕獲群組,當你只需要為量詞分組而不需要捕獲時使用;使用 (?<name>…) 建立命名群組如 (?<year>\d{4})。反向引用如 \1 重新匹配第 1 群組捕獲的內容,所以 (\w)\1 可以找到重複字母 — 例如「hello」中的「ll」。

前視和後視斷言是什麼?

前後視斷言在不消耗字元的情況下斷言文字在你的匹配旁邊(或不在旁邊)。(?=…) 是正向前視,(?!…) 是負向前視,(?<=…) 是正向後視,(?<!…) 是負向後視。例如,\d+(?=px) 匹配「5px」中的 5 但不包含「px」,而 (?<=\$)\d+ 透過要求前面有貨幣符號來匹配「$9」中的 9。前後視斷言是區分現代 regex 引擎與 POSIX grep 的特性之一。

regex 旗標有哪些?

旗標改變整個模式的套用方式:g(全域)尋找每個符合項目,i 使其不區分大小寫,m(多行)使 ^ 和 $ 匹配每行,s(dotall)讓 . 也匹配換行符,u 啟用完整 Unicode,y(sticky)將匹配錨定在固定位置。在 JavaScript 中,旗標加在結尾斜線後面,所以 /cat/gi 可以匹配文字中任何地方的「Cat」和「CAT」。本頁的測試器為每個旗標提供切換按鈕,讓你即時看到效果。

如何用 regex 匹配電子郵件、電話號碼或網址?

實用的起始模式:電子郵件 — [\w.+-]+@[\w-]+\.[\w.-]+ ;網址 — https?:\/\/[^\s]+ ;台灣電話 — \(?\d{4}\)?[-.\s]?\d{3}[-.\s]?\d{3},可以匹配 0912-345-678 或 (02) 1234 5678 等格式。這些是務實的起點,而非完整的 — 官方電子郵件標準複雜得多 — 所以務必用上方的即時測試器在你的真實資料上測試,每個模式都可以在常用模式列表中點一下載入。

如何跳脫 regex 中的特殊字元?

在任何元字元前加反斜線可以字面匹配它。通常需要跳脫的字元有:. ^ $ * + ? ( ) [ ] { } | \ 和 /。例如 \. 匹配原始的點,\$ 匹配錢字符,所以 \d+\.\d{2} 可以匹配價格如 19.99。在字元類別內,大多數這些字元失去特殊含義,所以 [.] 也可以在不跳脫的情況下匹配原始的點。

JavaScript、Python 和 Java 的 regex 方言有什麼不同?

核心語法是共通的,但細節有所不同。JavaScript 使用 (?<name>…) 命名群組,而 Python 使用 (?P<name>…);Python 使用原始字串如 r"\d+",Java 在字串字面量中需要雙重反斜線("\\d+")。Dotall 在 JS 中是 s 旗標,在 Python 中是 re.DOTALL,在 Java 中是 Pattern.DOTALL。本頁的方言對照表總結了 Python、Java、PCRE 和 grep 之間的差異,讓你能夠自信地在語言間移植模式。

如何在 Python 中使用正規表達式?

在 Python 中,正規表達式存在於內建的 re 模組。你通常將模式寫成原始字串,然後呼叫 re.search、re.findall 或 re.sub 等函數 — 例如 re.findall(r"\d+", "a1 b22") 返回 ['1', '22']。命名群組使用 (?P<name>…),用 match.group('name') 讀取。本頁的語法符號參考直接適用於 Python regex;只有周圍的 API 和少數旗標名稱與 JavaScript 不同。

如何測試 regex?

使用本頁頂部的即時測試器:在斜線之間輸入你的模式,切換你需要的旗標,然後貼上測試字串。符合項目即時高亮顯示,每個編號和命名的捕獲群組都會在下方列出,無效的模式會顯示內嵌錯誤訊息而不是靜默失敗 — 所有這些都在你的瀏覽器本機執行,你貼上的內容不會被上傳。像 regex101.com 和 regexr.com 這樣的工具也有類似功能;這個工具將參考手冊和測試器結合在同一頁面。

這個工具與 regex101.com 和 regexr.com 相比如何?

regex101.com 是深度 regex 除錯的業界標準 — 它支援多種方言(PCRE、Python、Java、.NET、Golang)並對你模式中的每個語法符號給出詳細說明。regexr.com 提供類似的體驗,還有社群貢獻的模式庫。兩者都是出色的專用工具。這個 UtiloKit 速查表的定位不同:它將語法符號參考表與基本即時測試器整合在同一頁面,讓你能夠快速查詢並在幾秒鐘內驗證,無需切換分頁。對於複雜的正式環境 regex 工作,regex101.com 的方言比較和詳細除錯器難以取代;對於開發過程中的快速查詢,這個參考頁面載入更快,無需任何導覽。

為什麼叫做「正規表達式」?

這個名稱來自形式語言理論。1950 年代,數學家 Stephen Kleene 描述了「正規集合」— 一種簡單有限狀態機器可以識別的語言 — 他為這些語言使用的符號記法後來被稱為正規表達式。現代 regex 引擎添加了反向引用和前後視斷言等特性,已超出嚴格意義上「正規」語言的範疇,但這個歷史名稱沿用至今。

Related tools

檢視所有工具