快速入門
教學
工具和語言
範例
參考
書籍評論
正規表示式教學
簡介
目錄
特殊字元
不可列印字元
正規表示式引擎內部
字元類別
字元類別減法
字元類別交集
簡寫字元類別
錨點
字詞邊界
交替
可選項目
重複
群組和擷取
反向參照
反向參照,第 2 部分
命名群組
相對反向參照
分支重設群組
自由間距和註解
Unicode
模式修改器
原子群組
佔有量詞
前瞻和後顧
環顧,第 2 部分
將文字保留在比對之外
條件式
平衡群組
遞迴
子常式
無限遞迴
遞迴和量詞
遞迴和擷取
遞迴和反向參照
遞迴和回溯
POSIX 方括號表示式
零長度比對
持續比對
本網站的更多內容
簡介
正規表示式快速入門
正規表示式教學
替換字串教學
應用程式和語言
正規表示式範例
正規表示式參考
替換字串參考
書籍評論
可列印 PDF
關於本網站
RSS 資訊和部落格
RegexBuddy—Better than a regular expression tutorial!

正規表示式教學
學習如何使用正規表示式並發揮最大效用

本教學教導您所有需要知道的知識,讓您能夠製作強大且省時的正規表示式。它從最基本的觀念開始,因此即使您對正規表示式完全不了解,也能夠遵循本教學。

本教學不僅止於此。它還會說明正規表示式引擎的內部運作方式,並提醒您後果。這有助於您快速了解為什麼特定正規表示式無法執行您最初預期的動作。當您需要撰寫更複雜的正規表示式時,它將為您省去許多猜測和苦惱。

正規表示式究竟是什麼 - 術語

基本上,正規表示式是一個描述一定數量文字的模式。它們的名稱來自於它們所根據的數學理論。但我們不會深入探討。你通常會發現這個名稱縮寫為「regex」或「regexp」。本教學使用「regex」,因為很容易發音複數形式的「regexes」。在本網站上,正規表示式以灰色陰影顯示為 regex

這個第一個範例實際上是一個完全有效的 regex。它是基本模式,只比對文字 regex。一個「比對」是文字片段,或 regex 處理軟體發現與模式對應的位元組或字元序列。比對在本網站上以藍色突顯。

\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b 是一個更複雜的模式。它描述一系列字母、數字、點、底線、百分比符號和連字號,後面跟著一個 at 符號,再後面跟著另一系列字母、數字和連字號,最後跟著一個點和兩個或更多字母。換句話說:這個模式描述一個 電子郵件地址。這也顯示了本網站套用在正規表示式上的語法突顯。字詞邊界和量詞是藍色,字元類別是橘色,而跳脫字元是灰色。你會在教學的後續看到其他顏色,例如用於分組的綠色和用於元標記的紫色。

使用上述正規表示式模式,你可以搜尋文字檔案以尋找電子郵件地址,或驗證給定的字串是否看起來像電子郵件地址。本教學使用術語「字串」來表示套用正規表示式的文字。本網站以 綠色 突顯它們。程式設計師使用術語「字串」或「字元字串」來表示一系列字元。實際上,你可以使用正規表示式搭配任何你可以使用你正在使用的應用程式或程式語言存取的資料。

不同的正規表示式引擎

正規表示式「引擎」是一種可以處理正規表示式的軟體,嘗試將樣式與給定的字串配對。通常,引擎是較大型應用程式的一部分,您無法直接存取引擎。反而是應用程式在需要時為您呼叫引擎,確保將正確的正規表示式套用至正確的檔案或資料。

在軟體世界中,不同的正規表示式引擎通常無法完全相容。特定引擎的語法和行為稱為正規表示式風格。本教學包含所有流行的正規表示式風格,包括 PerlPCREPHP.NETJavaJavaScriptXRegExpVBScriptPythonRubyDelphiRTclPOSIX 以及 許多其他。當這些風格需要不同的語法或展現不同的行為時,本教學會提醒您。即使您的應用程式並未明確包含在本教學中,它也可能使用本教學中涵蓋的正規表示式風格,因為大多數應用程式都是使用剛才提到的其中一種程式設計環境或正規表示式函式庫開發的。

初次嘗試正規表示式

您可以在支援正規表示式的文字編輯器中輕鬆自行嘗試下列範例,例如 EditPad Pro。如果您沒有此類編輯器,您可以 下載 EditPad Pro 的免費試用版 來嘗試看看。EditPad Pro 的正規表示式引擎在試用版中完全可用。

Searching Using Regular Expressions with EditPad ProSearching Using Regular Expressions with EditPad Pro

作為快速測試,複製並貼上此頁面的文字至 EditPad Pro。然後在選單中選擇搜尋 | 多行搜尋面板。在底部附近出現的搜尋面板中,在標籤為「搜尋文字」的方框中輸入 regex。勾選「正規表示式」核取方塊,然後按一下「尋找第一個」按鈕。這是搜尋面板上最左邊的按鈕。查看 EditPad Pro 的 regex 引擎如何尋找第一個符合項。按一下「尋找下一個」按鈕(位於「尋找第一個」按鈕旁邊)以尋找更多符合項。當沒有更多符合項時,「尋找下一個」按鈕的圖示會快速閃爍。

現在嘗試使用 regex reg(ular expressions?|ex(p|es)?) 進行搜尋。此 regex 會尋找我在此頁面中用來表示「regex」的所有名稱(單數和複數)。如果我們只有純文字搜尋,我們需要進行 5 次搜尋。使用 regex,我們只需要進行一次搜尋。使用 EditPad Pro 等工具時,regex 可以節省您的時間。在搜尋選單中選擇「計算符合項」以查看此正規表示式可以在您於 EditPad Pro 中開啟的檔案中符合多少次。

如果您是程式設計人員,您的軟體執行速度會更快,因為即使是套用上述 regex 一次的簡單 regex 引擎,其效能也會優於最先進的純文字搜尋演算法,後者必須在資料中搜尋五次。正規表示式也會減少開發時間。使用 regex 引擎,只需一行(例如在 Perl、PHP、Python、Ruby、Java 或 .NET 中)或幾行(例如在使用 PCRE 的 C 中)的程式碼,即可檢查使用者的輸入是否看起來像 有效的電子郵件地址

Regex 教學大綱