Regex 工具 |
grep |
PowerGREP |
RegexBuddy |
RegexMagic |
一般應用程式 |
EditPad Lite |
EditPad Pro |
語言和函式庫 |
Boost |
Delphi |
GNU (Linux) |
Groovy |
Java |
JavaScript |
.NET |
PCRE (C/C++) |
PCRE2 (C/C++) |
Perl |
PHP |
POSIX |
PowerShell |
Python |
R |
Ruby |
std::regex |
Tcl |
VBScript |
Visual Basic 6 |
wxWidgets |
XML Schema |
Xojo |
XQuery 和 XPath |
XRegExp |
資料庫 |
MySQL |
Oracle |
PostgreSQL |
本網站更多資訊 |
簡介 |
正規表示式快速開始 |
正規表示式教學 |
取代字串教學 |
應用程式和語言 |
正規表示式範例 |
正規表示式參考 |
取代字串參考 |
書籍評論 |
可列印 PDF |
關於本網站 |
RSS Feed 和部落格 |
Perl 最初由 Larry Wall 設計為一種彈性的文字處理語言。多年來,它已發展成一種功能齊全的程式語言,並持續專注於文字處理。當全球資訊網普及時,Perl 成為建立 CGI 腳本的事實標準。CGI 腳本是一小段軟體,可根據資料庫和/或造訪網站的人員輸入,產生動態網頁。由於 CGI 腳本基本上是一種文字處理腳本,因此 Perl 是而且仍然是自然選擇。
由於 Perl 專注於管理和處理文字,正規表示式文字樣式 是 Perl 語言中不可或缺的一部分。這與大多數其他語言形成對比,在這些語言中,正規表示式可用作附加函式庫。在 Perl 中,您可以使用 m// 運算子來測試 regex 是否可以比對字串,例如:
if ($string =~ m/regex/) { print 'match'; } else { print 'no match'; }
執行 regex 搜尋和取代也一樣容易
$string =~ s/regex/replacement/g;
我在最後一個正斜線後加上一個「g」。「g」代表「全域」,告訴 Perl 取代所有符合的項目,而不仅仅是第一個。選項通常會包含正斜線,例如「/g」,即使你沒有新增額外的正斜線,而且你也可以使用任何非字元來取代正斜線。如果你的 regex 包含正斜線,請使用其他字元,例如 s!regex!replacement!g。
你可以新增一個「i」讓 regex 比對不區分大小寫。你可以新增一個「s」讓 點 符合換行符號。你可以新增一個「m」讓 美元符號和插入符號 符合字串中內嵌的換行符號,以及字串的開頭和結尾。
將這些條件組合起來,你會得到類似 m/regex/sim; 的結果
Perl 有一組特殊變數,會在每次 m// 或 s/// regex 比對後填入資料。 $1、$2、$3 等會儲存 反向參照。 $+ 會儲存最後一個(編號最高的)反向參照。 $&(美元符號加上&符號)會儲存整個 regex 比對結果。
@- 是字串中比對開始索引的陣列。 $-[0] 儲存整個 regex 比對的開頭,$-[1] 儲存第一個反向參照的開頭,依此類推。同樣地,@+ 會儲存比對結束位置。若要取得比對長度,請從 $+[0] 減去 $-[0]。
在 Perl 5.10 及更新版本中,你可以使用關聯式陣列 %+ 來取得 命名擷取群組 比對的文字。例如,$+{name} 會儲存群組「name」比對的文字。Perl 沒有提供透過參照群組名稱取得擷取群組比對位置的方法。由於命名群組也有編號,你可以對命名群組使用 @- 和 @+,但你必須自行 找出群組的編號。
$'(美元符號加上撇號或單引號)會儲存 regex 比對後(右側)的字串部分。 $`(美元符號加上反引號)會儲存 regex 比對前(左側)的字串部分。不建議在效能很重要的腳本中使用這些變數,因為它會讓 Perl 放慢整個腳本中所有 regex 比對的速度。
所有這些變數都是唯讀的,並會持續到下一次 regex 比對嘗試為止。它們是動態範圍的,就好像在封閉範圍的開頭有一個隱含的「local」一樣。因此,如果你執行 regex 比對,然後呼叫執行 regex 比對的子程式,當該子程式傳回時,你的變數仍會設定為第一次比對的狀態。
「/g」修飾詞可用於處理字串中的所有正規表示式比對。第一個 m/regex/g 會找出第一個比對,第二個 m/regex/g 會找出第二個比對,依此類推。Perl 會自動記住字串中下一次比對嘗試的開始位置,而且會針對每個字串分別記住。以下是一個範例
while ($string =~ m/regex/g) { print "Found '$&'. Next attempt at character " . pos($string)+1 . "\n"; }
pos() 函數會擷取下一次嘗試開始的位置。字串中的第一個字元位置為零。你可以使用函數作為指定函數的左側,來修改這個位置,就像 pos($string) = 123;。
以上說明了如何使用 Perl 的正規表示式,這可能就是你所需要知道的全部內容。但是,如果你想深入了解 Perl 可以執行的所有正規表示式相關技巧,我建議你購買 Jeffrey Friedl 的《Mastering Regular Expressions》第二版。書中有一個 80 頁的章節,專門介紹與正規表示式相關的 Perl 奇技淫巧。一般的 Perl 書籍通常只包含在本網站的 教學課程 中有更佳說明的一般內容。
我對《Mastering Regular Expressions》這本書的評論
| 快速入門 | 教學課程 | 工具與語言 | 範例 | 參考 | 書籍評論 |
| grep | PowerGREP | RegexBuddy | RegexMagic |
| EditPad Lite | EditPad Pro |
| Boost | Delphi | GNU (Linux) | Groovy | Java | JavaScript | .NET | PCRE (C/C++) | PCRE2 (C/C++) | Perl | PHP | POSIX | PowerShell | Python | R | Ruby | std::regex | Tcl | VBScript | Visual Basic 6 | wxWidgets | XML Schema | Xojo | XQuery & XPath | XRegExp |
| MySQL | Oracle | PostgreSQL |
頁面網址:https://regular-expressions.dev.org.tw/perl.html
頁面最後更新時間:2021 年 11 月 5 日
網站最後更新時間:2024 年 3 月 15 日
版權所有 © 2003-2024 Jan Goyvaerts。保留所有權利。