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 饋送和部落格 |
GNU 是「GNU's Not Unix」的縮寫,是一個專案,致力於為全球提供所有在 Unix 系統上常見工具的免費和開放原始碼實作。大多數 Linux 系統都隨附完整的 GNU 應用程式套件。這顯然包括傳統的正規表示式工具程式,例如 grep、sed 和 awk。
GNU 對這些工具的實作遵循 POSIX 標準,並新增 GNU 擴充套件。GNU 擴充套件的效果是 基本正規表示式 風格和 延伸正規表示式 風格都提供完全相同的功能。唯一的差別是 BRE 會使用反斜線讓各種字元具有特殊意義,而 ERE 會使用反斜線取消相同字元的特殊意義。
基本正規表示式或 BRE 風格幾乎是當今仍在使用的最古老的正規表示式風格。GNU 工具程式 grep、ed 和 sed 使用它。讓此風格與眾不同的其中一件事是,大多數的元字元都需要反斜線才能讓元字元具有其風格。包括 GNU ERE 在內的大多數其他風格都使用反斜線來取消元字元的意義。使用反斜線來跳脫從來都不是元字元的字元是錯誤的。
BRE 支援 POSIX 方括號表示式,類似於其他 regex 風格中的字元類別,並具有一些特殊功能。使用一般元字元的其他功能包括 點,用來比對換行符號以外的任何字元;插入符號和美元符號,用來比對字串的開頭和結尾;以及 星號,用來重複令牌零次或多次。若要逐字比對這些字元,請使用反斜線跳脫它們。
其他 BRE 元字元需要反斜線才能賦予它們特殊意義。原因是 UNIX grep 的最舊版本不支援這些元字元。grep 的開發人員希望讓它與現有的正規表示式相容,而現有的正規表示式可能會將這些字元當成字面字元使用。BRE a{1,2} 會將 a{1,2} 視為字面值,而 a\{1,2\} 會將 a 或 aa 視為相符。可以將代碼塊用 \( 和 \) 分組。反向參照是常見的 \1 到 \9。最多只允許 9 個群組。例如:\(ab\)\1 會將 abab 視為相符,而 (ab)\1 則無效,因為沒有對應於反向參照 \1 的擷取群組。使用 \\1 將 \1 視為字面值。
除了上面說明的 POSIX BRE 提供的內容之外,GNU 延伸功能提供 \? 和 \+ 作為 \{0,1\} 和 \{1,\} 的替代語法。它透過 \| 加入交替,這是 POSIX BRE 嚴重缺乏的功能。事實上,這些延伸功能表示 GNU BRE 具有與 GNU ERE 完全相同的功能,只不過 +、?、|、大括號和圓括號需要反斜線才能賦予它們特殊意義,而不是取消特殊意義。
延伸正規表示式或 ERE 風格是由 GNU 工具程式 egrep 和 awk 以及 emacs 編輯器所使用。在此脈絡中,「延伸」純粹是歷史上的稱呼。GNU 延伸功能讓 BRE 和 ERE 風格在功能上相同。
所有元字元在沒有反斜線的情況下都有其意義,就像在現代正規表示式風格中一樣。您可以使用反斜線來取消所有元字元的意義。將非元字元轉譯成跳脫字元會產生錯誤。
量化詞 ?、+、{n}、{n,m} 和 {n,} 分別重複前一個代碼塊 0 次或 1 次、1 次或多次、n 次、n 到 m 次,以及 n 次或更多次。交替透過常見的垂直線 | 來支援。未加裝飾的圓括號會建立一個群組,例如:(abc){2} 會將 abcabc 視為相符。
POSIX ERE 不支援 反向參照。GNU 延伸功能使用相同的 \1 到 \9 語法加入反向參照。
GNU 延伸功能不僅讓兩種風格相同,還加入了一些新的語法和幾個全新的功能。您可以使用 簡寫類別 \w、\W、\s 和 \S 來取代 [[:alnum:]_]、[^[:alnum:]_]、[[:space:]] 和 [^[:space:]]。您可以在正規表示式中直接使用這些類別,但不能在方括號表示式中使用。方括號表示式中的反斜線永遠是字面意思。
新功能包括 字元邊界 和 錨點。GNU 和現代風格一樣,支援 \b 來比對字元邊界位置,以及 \B 來比對非字元邊界位置。 \< 比對字首位置,而 \> 比對字尾位置。錨點 \` (反引號) 比對主旨字串的開頭,而 \' (單引號) 比對主旨字串的結尾。這些功能對一次比對多行文字的工具很有用,因為 ^ 會比對行首,而 $ 會比對行尾。
如果您無法在自己的 (開源) 應用程式中使用 GNU 的正規表示式實作,那 GNU 就不是 GNU 了。若要這麼做,您需要 下載 Gnulib。使用隨附的 gnulib-tool 將正規表示式模組複製到您的應用程式原始碼樹。
正規表示式模組提供標準 POSIX 函式 regcomp() 來編譯正規表示式、regerror() 來處理編譯錯誤、regexec() 來使用編譯的正規表示式執行搜尋,以及 regfree() 來清除您已用完的正規表示式。
| 快速入門 | 教學 | 工具與語言 | 範例 | 參考 | 書籍評論 |
| 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/gnu.html
頁面最後更新時間:2021 年 11 月 5 日
網站最後更新時間:2024 年 3 月 15 日
版權所有 © 2003-2024 Jan Goyvaerts。保留所有權利。