正規表達式(Regex)入門教學筆記 | 學習筆記

Posted by kdchang on 2024-12-13


1. 正規表達式簡介

正規表達式(Regular Expression,簡稱 Regex)是一種用於字串匹配與處理的強大工具。它廣泛應用於文字搜尋、資料驗證、文字替換等場景。正規表達式透過特殊的語法模式來描述字串結構,並可被多種程式語言支援,如 Python、JavaScript、Java、C# 等。

2. 基本語法與範例

2.1 字面量匹配

正規表達式最基本的形式是字面量匹配,意即直接搜尋特定字串。

範例

hello

可匹配「hello」這個字串。

2.2 字元類別(Character Classes)

字元類別用來匹配特定類型的字元。

語法 說明 範例
. 任意單一字元(不含換行) h.t 可匹配 hat, hot, hit
[abc] 任意列出的字元 [aeiou] 可匹配任一母音字母
[^abc] 不包含列出的字元 [^0-9] 可匹配任何非數字字元
[a-z] 字母範圍 [a-zA-Z] 可匹配所有英文字母
\d 任意數字(等價於 [0-9] \d{2} 可匹配 23, 89
\w 任意字母、數字或底線([a-zA-Z0-9_] \w+ 可匹配 hello_123
\s 空白字元(空格、Tab、換行) \s+ 可匹配

2.3 邊界匹配(Anchors)

用來限制匹配的位置。

語法 說明 範例
^ 開頭 ^Hello 只能匹配 Hello world,但不匹配 Say Hello
$ 結尾 world$ 只能匹配 Hello world,但不匹配 world today
\b 單字邊界 \bcat\b 只匹配 cat,但不匹配 catch

2.4 重複匹配(Quantifiers)

用來指定重複次數。

語法 說明 範例
* 0 次或更多 ba* 可匹配 b, ba, baa, baaa
+ 1 次或更多 ba+ 可匹配 ba, baa, baaa 但不匹配 b
? 0 次或 1 次 colou?r 可匹配 colorcolour
{n} 恰好 n 次 a{3} 只匹配 aaa
{n,} 至少 n 次 a{2,} 可匹配 aa, aaa, aaaa
{n,m} n 到 m 次 a{2,4} 可匹配 aa, aaa, aaaa

2.5 分組與選擇(Groups & Alternation)

使用括號來分組,使用 | 來表示選擇。

範例

(grape|apple|banana)

匹配 grapeapplebanana

範例(分組)

(a|b)c

匹配 acbc

2.6 轉義字元(Escape Characters)

正規表達式中的特殊字元(如 .*?)需要用 \ 進行轉義。

範例

\.com

匹配 .com(實際字面值)。

3. 正規表達式應用範例

3.1 Email 驗證

^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

匹配範例

  • test@example.com
  • hello@domain.co.uk
  • invalid@com

3.2 手機號碼驗證(台灣格式)

^09[0-9]{8}$

匹配範例

  • 0912345678
  • 1234567890

3.3 找出所有網址

https?://[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(/\S*)?

匹配範例

  • https://www.google.com
  • http://example.org/test
  • ftp://invalid.url

3.4 HTML 標籤匹配

<([a-z]+)([^<]+)*(?:>(.*?)</\1>|/>)

匹配範例

  • <div class="container">Content</div>
  • <img src="image.jpg" />

4. 總結

正規表達式是一種強大的工具,適用於文字處理與資料驗證。透過學習基本語法與實際應用,你可以更有效率地處理字串相關的問題。實務上建議透過線上工具(如 Regex101 等工具)來測試你的正規表達式,以加深理解。


歡迎分享按讚給予支持和鼓勵!


Related Posts

Comments