什麼是正規表示式?完整說明
快速解答
正規表示式是描述一組字串的模式。它使用文字字元(匹配自身)和具有特殊意義的元字元(*、+、?、.、^、$、[]、()、{}、|、\)。正規表示式用於驗證、搜尋、提取和替換。使用我們的免費正規表示式測試器根據瀏覽器中的文字測試模式。
介紹
正規表示式(regex 或 regexp)是定義搜尋模式的字元序列。字串搜尋演算法使用該模式來尋找、匹配或取代文字。正規表示式起源於 20 世紀 50 年代的形式語言理論(Stephen Kleene),並在 1970 年代被採用到 Unix 文本工具(grep、sed、awk)中。如今,正規表示式幾乎內建於所有程式語言和文字編輯器中。正規表示式功能強大——它可以驗證電子郵件格式、從日誌中提取資料並查找複雜的模式——但語法很密集且非常難以閱讀。
步步
-
理解文字和元字符
文字字元(a、b、1、@)與其自身相符。元字符具有特殊意義: .匹配任何字符,* 表示零個或多個,+ 表示一個或多個,?表示零或一,^ 匹配開始,$ 匹配結束。
-
學習角色類別
方括號 [] 定義字元類別 - [aeiou] 匹配任何元音,[0-9] 匹配任何數字,[^0-9] 匹配任何非數字。速記類:\d(數字)、\w(單字字元)、\s(空格)及其大寫否定。
-
使用量詞
量詞指定模式重複的次數:* (0+)、+ (1+)、? (0 或 1)、{n}(剛好是 n)、{n,}(n+)、{n,m}(n 到 m)。默認貪婪;加 ?用於惰性匹配(例如,*?)。
-
群組和主播
括號 () 建立捕獲組。交替 |匹配任一側 (cat|dog)。錨點 ^ 和 $ 匹配字串的開頭和結尾。使用它們從簡單的模式建立複雜的模式。
範例
匹配電話號碼格式
輸入: Pattern: \d{3}-\d{3}-\d{4}
輸出: Matches: 555-123-4567
提取鍵值對
輸入: Pattern: (\w+)=(\w+)
輸出: Matches 'key=value' with group 1 as key, group 2 as value
常見問題
- 貪婪匹配會過度消耗 —.* 盡可能多的匹配。使用 。 *?用於惰性匹配以找到最短匹配。
- 忘記轉義特殊字元 —.、*、+、? 等都是特殊字元。使用 \ 按字面匹配它們(例如,\. 匹配字面點)。
- 災難性回溯-具有嵌套量詞的模式(例如,(a+)+)可能會在某些輸入上花費指數時間,從而導致 ReDoS 攻擊。
- 過度匹配-沒有錨點(^ 和 $),模式可以匹配任何地方。使用 ^...$ 來匹配整個字串。
提示
- 從簡單開始,逐漸增加複雜性——一次調試一個複雜的正規表示式非常困難。
- 使用正規表示式測試器根據範例文字試驗模式 - 查看即時突出顯示的匹配項。
- 使用擴展模式(某些引擎中的 /x 標誌)註解複雜的正規表示式或將它們分解為命名部分。
- 使用我們的正規表示式測試器在瀏覽器中立即測試模式 - 無需註冊,完全私密。