正規表示式,通常稱為 Regex,是開發、系統管理和處理大量文字領域中最強大和用途最廣泛的資源之一。 然而,對於許多初次接觸正規表示式的使用者和程式設計師來說,它的語法可能晦澀難懂,甚至令人不知所措。掌握正規表示式的規則和模式,可以以無與倫比的效率和靈活性搜尋、過濾、驗證和轉換文字。
您是否想過如何在 IT 專案中尋找文件中的複雜模式、驗證表單、轉換資料或自動化搜尋流程? 無論您是開發人員、系統管理員,還是只是好奇的用戶,本文都適合您。準備好閱讀一份完整、實用且最重要的、清晰易懂的正規表示式規則指南,以及它們在各種情境中的應用。
什麼是正規表達式規則或正規表示式?
正規表示式(Regex,英文縮寫為 正則表達式) 是字元序列或模式,能夠定義在其他文字中尋找、驗證或操作文字的規則。 假設您正在尋找特定的短語、特定的格式(例如電子郵件、日期、電話號碼)、符合特定條件的名稱,或者您想要批量替換部分文字:在所有這些情況下, 正規表示式是理想的工具.
基本思想是 用一系列符號、字母和特殊運算子來描述我們要定位、驗證或修改的文字必須滿足的模式。例如,如果你想要尋找短語中的所有數字,你可以定義一個簡單的模式,即「任何數字字元」(例如 \d)。如果您想要更高級的功能,您可以建立更複雜的規則,例如:“所有以‘Copy’開頭並以數字結尾的字串。”
正規表示式的歷史與演變
正規表示式誕生於20世紀中葉,屬於形式邏輯與自動機理論領域。 它的第一個實際用途是在基於 UNIX 的系統中,其實實用程式包括 ed, grep的, 口渴 y AWK. 隨後,標準 POSIX 擴展了它的語法,並將其融入多種環境中。後來,該語言 Perl的 將 Regex 提升到一個新的水平,增加了新功能並在開發者社群中推廣它們。
現在, 大多數程式語言都內建了 Regex (JavaScript、Python、Java、C#、PHP、Ruby 等),以及進階文字編輯器、作業系統、Web 框架和多種命令列實用程式。這使得正規表示式成為一種真正通用的語言,可用於在任何計算環境中處理文字。
正規表示式規則有什麼用處?
該 正規表示式規則 它們不僅用於搜索,還可以驗證、提取、轉換並允許您在幾秒鐘內過濾或修改大量資料。
- 在大量文字中尋找模式: 無需手動操作,即使在大型文件或資料庫中也能找到電子郵件、URL、姓名、號碼、日期等。
- 驗證使用者輸入: 在儲存密碼之前,檢查密碼是否符合要求、電話號碼或電子郵件地址是否正確。
- 編輯和替換文字: 取代文字的特定部分,從刪除 HTML 標籤到規範資料格式。
- 自動化流程: 根據非常精確的規則過濾日誌、轉換清單、分析日誌檔案或批次重新命名檔案。
正規表示式基礎:基本概念
正規表示式規則由文字字元和元字元組合而成。理解這些元素是建立有用模式的基礎。
1. 文字字符
文字字元準確表示您要搜尋的字元。 例如,表達式 家 將在目標文字中依該順序準確定位該序列。
2. 元字元:正規表示式的力量
元字元是擴展正規表示式意義的特殊符號,賦予其多功能性和強大功能。 最常見的包括:
- . 點代表除換行符之外的任何字元。
- [] 括號定義允許的字元類別或集合。
- ^ 圓括號可以標記一行或一個單字的開頭,或者,如果它括在括號中,則可以標記一個集合的否定。
- $ 美元符號表示一行或文字的結束。
- * 星號可讓您搜尋前一個元素的「零次或多次重複」。
- + 加號搜尋「一次或多次重複」。
- ? 指示前一個元素是可選的(零次或一次)。
- () 括號將表達式的各個部分分組以應用量詞、提取子組或定義替代方案。
- | 豎線代表邏輯選擇“或”。
- \ 反斜線轉義後面字元的特殊意義或引入縮寫序列(例如 \d, \w, \s).
3.量詞:控制重複
量詞可讓您定義字元、類別或群組應重複的次數:
- *:零次或多次重複。
- +:一次或多次。
- ?:一次或根本不進行(可選)。
- {不是}: 確切地 n 重複。
- {n,}: 至少 n 次(無最大值)。
- {n,m}: 之間 n y m 重複。
4. 字元類別和縮寫
字元類別可以讓我們進一步縮小搜尋範圍:
- [az]:任意小寫字母。
- [AZ]:大寫字母。
- [0-9]:任意數字。
- [ABC]:字母 a、b 或 c。
- [^xyz]:任意字符 除 x,i z。
- \d:十進制數字(相當於[0-9])。
- \D:任何字符 沒有 是一個數字。
- \w:單字字元(字母、數字或底線;相當於 [a-zA-Z0-9_])。
- \W:任何非單字字元。
- \s:空白(空格、製表符、換行符)。
- \S:空格以外的任意字元。
5. 錨點:將模式放置在文字中
錨點允許您將模式放置在一行的開頭或結尾,或單字的開頭/結尾。
- ^:行或文字的開頭。
- $:行尾或文字結尾。
- \b:單字邊界(開始或結束)。
- \B:非詞邊界點(內部)。
Regex 規則的實際範例
現在讓我們看看這些規則如何應用於現實生活中的簡單和高級場景,以便您可以快速將所學知識付諸實踐。
- 驗證電子郵件: ^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,6})+$
- 尋找 DNI 號碼: \b\d{8}[- ]?[trwagmyfpdxbnjzsqvhlcke]?\b
- 偵測 IP v4 位址: ^(?:(?:25[0-5]|2[0-4]\d|1?\d?\d)(?:\.(?!$)|$)){4}$
- 從 HTML 標籤中擷取 URL:
- 檢測 Java 中的註解行: //[^\r\n]*[\r\n]
高級邏輯和模式定制
正規表示式可讓您透過組合群組、替代、引用和高級量詞來建立複雜的模式,從而允許您過濾、驗證或定位非常特定的資訊。
團體和協會
透過將模式的一部分括在括號中,我們建立了一個群組。這使我們能夠將量詞應用於整個群組、提取資訊或引用子模式。
例如,表達式 ((ma)+b) 將符合“mab”或“mamab”,但不符合“maab”。稍後可以使用以下方式引用群組 \1, \2等,非常適合尋找相似的重複模式。
替代項(|):正規表示式中的邏輯“或”
豎線 | 允許您定義替代方案:由此符號分隔的任何模式均有效。 例如,(boy|girl) 將符合兩個字。
使用 \ 轉義元字符
反斜線 \ 消除元字元的特殊含義或引入縮寫序列至關重要。 例如,「\.」搜尋文字句點,「\?」搜尋問號,「\\」搜尋反斜線本身,等等。
貪婪和懶惰量詞
預設情況下,正規表示式量詞是貪婪的:它們會取得盡可能多的文字。添加 ? 它被改為“懶惰”,以捕獲最少的必要性。
例如: 狗 將找到“perr”和“o”之間的最長字串,而 狗 將捕獲最小值。
斷言和環視
前瞻和後瞻斷言允許您在符合「之前」或「之後」驗證條件,而無需消耗文字中的字元。
- 積極展望: (?=模式) 檢查目前位置後是否存在“pattern”。
- 負面前瞻: (?!圖案) 檢查下面是否存在“模式”。
- 正向/負向後視: (?<=模式) y (? 他們「反向」做同樣的事情。
正規表示式在現實世界中的實際應用
正規表示式廣泛應用於各種領域和日常任務:
- 表單驗證:電子郵件、電話號碼、姓名、強密碼。
- 日誌處理和系統審計:在日誌檔案中搜尋模式,提取錯誤和警告。
- SEO和URL管理:.htaccess 中的 URL 重寫、參數過濾器、搜尋分段。
- 大量文字編輯:清理 HTML 標籤、刪除冗餘空格、規範電子表格中的資料、調整遺留程式碼。
- Web 開發和自動化:自動化測試、伺服器規則配置、抓取工具開發。
不同的正規表示式風格和引擎
並非所有的 Regex 實作都支援相同的功能;根據所使用的語言、工具或引擎,存在不同的「風格」。
- POSIX: 基於 UNIX 的原始語法。不如 Perl 或 PCRE 廣泛。
- Perl/PCRE: 非常完整,它們支援環視、進階引用、修改器和子程式。
- JavaScript的: 在網路上廣泛使用,與大多數運算子相容,但在後視方面存在限制(現代版本除外)。
- .NET 和其他語言: 它們通常與 PCRE 相容,但始終建議查閱該語言自己的文件。
因此,無論何時您要在特定環境中工作,請檢查 Regex 在該工具或語言中接受什麼支援和語法。
如何測試和建立自己的正規表示式模式
學習正規表示式的最佳方法是透過範例練習並使用網路上提供的即時測試工具。
- regex101.com:允許您編寫模式、檢查結果、查看解釋和效能統計資料。
- regexr.com::出色的逐步幫助選項、視覺化圖形和互動式範例。
- 可視化解釋器和程式碼產生器:非常適合理解複雜模式並從頭開始產生表達式。
- 線上遊戲和練習:透過遊戲來學習並解決真正的挑戰,以內化正規表示式的工作原理。
常見錯誤和掌握 Regex 的實用技巧
正規表示式功能強大,但也可能令人困惑。以下技巧可以幫助您避免常見的陷阱:
- 轉義元字符 搜尋其字面值時。例如,使用 \. 就這一點而言, \* 對於星號, \? 接受審訊。
- 不要過度使用句點 (.) 和通配符 .*。 它們非常有用,但如果您沒有很好地定義模式,它們可能會返回不必要的結果。
- 當您想要將模式限制在一行的開頭或結尾時,請新增錨點(^,$) 並避免部分匹配。
- 使用特定的量詞 在搜尋精確重複時,而不是僅僅依靠 * 或 +。
- 總是試著用正面和反面的例子。 這樣,您就可以偵測模式是否涵蓋所有必要的情況,而不會產生誤報。
- 分而治之: 如果您有一個非常複雜的模式,請將其分成幾部分構建,最後將各個片段組合起來。
- 請隨意查看備忘單、文件和論壇。 查看範例和日常技巧。
將 Regex 整合到程式語言和工具中
正規表示式已整合到所有主流語言的最常用函數中。以下是一些範例:
- JavaScript的: 方法 測試(), 執行() RegExp 物件及其方法 匹配(), 搜索(), 代替 (), 分裂() 的字串。
- 蟒蛇: 模塊 re 提供以下功能 搜索(), 匹配(), 找到所有(), 子()等等。
- PHP: 功能 preg_match(), preg_replace(), preg_split() 和其他人
- 。網: 長石 正則表達式 採用先進的方法和 PCRE 支援。
在編輯器中 VSCode、Sublime、Atom 或 Notepad++,您也可以使用正規表示式進行搜尋和取代。在 UNIX 系統上,可以使用下列實用程式 grep的, 口渴 y AWK 結合他們自己的正規表示式引擎。
SEO 和 URL 管理中的正規表示式
Regex 是 WordPress、Joomla 和電子商務等平台上的 URL 最佳化、Web 路由和動態參數管理的關鍵元件。
- .htaccess 和 mod_rewrite: 它們允許你使用正規表示式規則將醜陋的、充滿參數的 URL 轉換為友善的地址。這樣,
www.ejemplo.com/index.php?p=123
可以轉化為www.ejemplo.com/articulo/titulo-amigable
,這既提高了 SEO,也提高了用戶體驗。 - 參數過濾: 提取、清理或轉換 URL 中的參數,以使結果適應不同的搜尋環境。
使用正規表示式規則,網站管理員可以建立重寫模式來識別和修改 URL 元件,以改善結構、優化以及搜尋引擎和使用者的理解。
高階正規表示式:技術和資源
正規表示式不僅支援直接搜索,還支援條件分組、子程式、遞歸、反向引用等等。這使得它成為完成複雜任務的必備工具。
- 子程式和反向引用: 它們允許您找到重複的模式、對稱性、序列和非常具體的驗證。
- 有條件的: 根據先前組中捕獲的內容運行不同的搜尋或驗證。
- 遞迴: 一些進階引擎可讓您定義適用於自身的模式,這在處理 XML 或 JSON 等結構化資料時非常有用。
- 全域修飾符: (Perl/JavaScript 中的 /g、/i、/m)允許全域、不區分大小寫或多行搜尋。
學習正規表示式的必備資源
如果您想擴展自己的知識,這些資源將會很有用:
- 維基百科: 詳細的理論和技術解釋。
- Regular-Expressions.info: 適合各個級別的參考和教程。
- 備忘錄: 所有最常見的運算符、群組和規則的快速摘要。
- 互動教程: 透過練習和即時回饋直接練習。
- 社區和論壇: 向其他用戶學習、提出問題並分享您的個人技巧。
學習正規表示式在文字管理和處理方面具有很大的優勢,可以實現更有效率的搜尋、驗證、轉換和自動化。 透過一致性和實踐,編寫正規表示式模式變得更容易、更自然。 利用線上工具和實作練習,從簡單範例著手,逐步學習更複雜的模式。一旦掌握了正規表示式的原理,它將成為您開發和系統管理工具庫中的自然補充,幫助您輕鬆完成那些之前看似複雜或乏味的任務。