Perl 以強大的正規表達式(Regex)聞名,是文本處理首選語言。本文循序漸進介紹 Perl Regex 核心語法,涵蓋匹配、錨點、字符類、選擇分支與分組,並提供實戰範例。
=~ m//$string =~ m/text/ # 字串包含 "text" 時為真
$string =~ m/.ext/ # 任意字元 + "ext" → 匹配 "text", "next"
$string =~ m/^.ext/ # 開頭任意字元 + "ext" → 匹配 "text",不匹配 "context"
$string =~ m/.ext$/ # 結尾 "ext" → 匹配 "context",不匹配 "dextrous"
$string =~ m/^.ext$/ # 完整匹配 4 字元且以 "ext" 結尾
[] 與否定 [^]$string =~ m/^[tT]ext$/ # 僅匹配 "text" 或 "Text"
$string =~ m/[aeiouAEIOU]/ # 含任一母音
$string =~ m/[^aeiouAEIOU]/ # 非母音(輔音/標點/數字等)
$string =~ m/[a-z]/ # 任一小寫字母(範圍寫法)
| 與分組 ()$string =~ m/next|previous/ # 包含 "next" 或 "previous"
$string =~ m/^(next|previous)/ # 開頭為 "next" 或 "previous"
$string =~ m/^(?:next|previous)/ # 非捕獲分組 (?:) 效能稍佳
| 量詞 | 含義 | 範例 |
|---|---|---|
* | 0 次或以上 | ab*c 匹配 "ac", "abc", "abbc"... |
+ | 1 次或以上 | ab+c 匹配 "abc", "abbc"... |
? | 0 次或 1 次 | ab?c 匹配 "ac", "abc" |
{n,m} | n 到 m 次 | a{2,4} 匹配 "aa", "aaa", "aaaa" |
*?, +? | 非貪婪(最少匹配) | a.*?b 在 "a x b y b" 匹配 "a x b" |
my $email_regex = qr/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/;
if ($input =~ $email_regex) { print "Valid\n"; }
i:大小寫不敏感 m/pattern/im:多行模式,^/$ 匹配行首尾s:單行模式,. 匹配換行符x:擴展模式,忽略空白並允許註解g:全域匹配(搭配 while ($str =~ /pattern/g))\N{NAME} Unicode 命名字符,PCRE 需 \x{...}。qr// 編譯正規物件,PHP 用 preg_quote() 或直接字串。preg_* 函數語法與 Perl 高度相容(PCRE 库)。掌握 Perl Regex 核心語法,即能在 PHP、Python、JavaScript 等支援 PCRE 的語言中舉一反三,高效解決文本解析、驗證與轉換問題。