快速入門
教學
工具和語言
範例
參考
書籍評論
正則表示式工具
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 和部落格

Just Great Software 正則表示式引擎

Just Great Software (JGsoft) 正則表示式引擎是由 Jan Goyvaerts 設計和開發,他也是這份 正則表示式教學 的作者。此引擎是 Just Great Software 產品 PowerGREP(第 3 版及後續版本)、RegexBuddy(第 2 版及後續版本)和 RegexMagic(所有版本)的核心。它也支援 EditPad Pro(第 6 版及後續版本)、EditPad Lite(第 7 版及後續版本)和 AceText(第 2 版及後續版本)中的正則表示式搜尋功能。

此引擎及其正則表示式風格是專門為 PowerGREP、RegexBuddy 和 RegexMagic 開發。JGsoft 風格提供所有最受歡迎的正則表示式風格中找到的所有功能的混合。它完全支援 Unicode 和廣泛的舊式編碼頁。PowerGREP(第 3 版及後續版本)和 EditPad Pro(第 7 版及後續版本)中的引擎可以在不將檔案分割成任意區塊的情況下處理大於 4GB 的檔案。

RegexBuddy 和 RegexMagic 具有 Just Great Software 引擎的特殊版本,可以模擬許多其他正則表示式風格的限制和風格特定功能。當您在 RegexBuddy 或 RegexMagic 中選擇正則表示式風格時,其所有功能都會使用該風格。甚至內建的 grep 也是如此。

Just Great Software 引擎無法作為可嵌入到其他應用程式的元件。它是專門設計用於 Just Great Software 產品中,而不是作為通用引擎。除非您正在開發一個像 PowerGREP 或 RegexBuddy 這樣的工具,其中正則表示式是核心功能,否則您的開發環境中已提供的正則表示式風格將綽綽有餘。請為您的使用者著想,並非常清楚地說明您的應用程式使用哪種正則表示式風格。然後,他們可以輕鬆地在此網站上查詢具體資訊。

JGsoft V2

PowerGREP 5 引進了 JGsoft 正規表示式風格的主要新版本,我們將其稱為 JGsoft V2。當您在 RegexBuddy 4 和 RegexMagic 2 中選擇 PowerGREP 5 作為您的應用程式時,此風格也可用。JGsoft V2 帶來了許多重要的新功能。它也帶來了一些重大變更。

JGsoft V2 現在支援 平衡群組,例如 .NET 正規表示式風格,以及 分支重設群組,例如 Perl 和 PCRE。另一個新功能是 字元類別交集,使用 [類別&&[交集]] 語法,例如 Java 和 Ruby。需要成對的方括號。JGsoft V2 不支援 [類別&&交集] 語法,因為這可能會導致人們撰寫 [類別&&交集&&再次],而這在 Java 和 Ruby 中的行為無法預測。

在 Perl 和 PCRE 中,您可以使用 \K將文字保留在比對之外,以解決它們對後向參照的限制。雖然在不受限後向參照的 JGsoft V2 中並不需要 \K,但您現在可以在 JGsoft V2 中使用 \K,就像在 Perl 或 PCRE 中一樣,如果您習慣以這種方式撰寫正規表示式。

Perl、PCRE 和 Ruby 都支援正規表示式 遞迴子常式。這三者在很大程度上複製了彼此的語法,導致撰寫遞迴和子常式有多種方法。但這三者並未複製彼此的比對行為,導致儘管語法類似,但行為差異明顯。JGsoft V2 提供三組遞迴和子常式呼叫語法。每組語法都遵循這三種風格之一的比對行為。如同在 PCRE 中,(?P>name) 不擷取還原擷取群組,而且 是原子性的。您可以透過它與原子群組的相似性來記住這個語法。與 PCRE 不同,JGsoft V2 也支援 (?P>1)(?P>0),因此您可以為編號呼叫和遞迴指定此行為。如同在 Perl 中,(?R)(?1)(?&name) 不擷取還原擷取群組,而且 允許回溯。您可以透過 Perl 程式碼中 &subroutine(); 呼叫中使用的連字元來記住這個語法。最後,如同在 Ruby 中,\g<0>\g<1>\g<name> 擷取子常式呼叫的比對不還原擷取群組,而且 允許回溯。您可以透過 Ruby 的正規表示式風格不支援任何其他遞迴和子常式呼叫語法這個事實來記住這個語法。

\h 是水平空白字元的全新簡寫字元類別。它包含空白、標籤和所有 Unicode 空白字元,但換行和段落中斷除外。\v 以前是比對垂直標籤的跳脫字元。現在 \v 是垂直空白字元的簡寫。這包括垂直標籤、換行、分頁和段落中斷。\v 分別比對 CR 和 LF。\H\V 是這兩個全新簡寫的反向版本。

\R 是一個新的特殊跳脫字元,用於比對任何換行符號,包括 Unicode 換行符號。它的特殊之處在於它將 CRLF 成對處理為不可分割的。如果 \R 的比對嘗試在字串中的 CRLF 成對之前開始,則單一的 \R 會比對整個 CRLF 成對。 \R 絕不會回溯以僅比對 CRLF 成對中的 CR。因此,雖然 \R 可以比對單獨的 CR 或單獨的 LF,但 \R{2} 無法比對單一的 CRLF 成對。

\l\u 現在是 \p{Ll}\p{Lu} 的簡寫。它們比對任何 Unicode 小寫或大寫字元。這些記號永遠區分大小寫。

POSIX 類別 使用符號 [[:alpha:]] 現在僅比對 ASCII 字元。 \p{Alpha} 符號仍比對 Unicode 字元。 [[:d:]][[:s:]][[:w:]][[:l:]][[:u:]] 現在是 [[:digit:]][[:space:]][[:word:]][[:lower:]][[:upper:]] 的簡寫。您可以將它們視為 \d\s\w\l\u 的僅 ASCII 版本。

\i\c 現在是 XML 簡寫字元類別\cA\cZ 不再支援為 控制字元跳脫字元

八進位跳脫字元現在必須寫成 \o{377}。八進位數字範圍從 \o{0}\o{177777}。舊的 \0377 語法現在是錯誤的。JGsoft 風格從未支援 \377,因為它與反向參照的語法太容易混淆。 \0 現在也是錯誤的,而不是比對一個字面值零。使用 \x00 來比對 NULL 位元組。

替換字串語法已延伸至替換字串條件式,以達成此目的。 (?1已配對:未配對) 會插入 已配對(如果第一個擷取群組參與配對)或 未配對(如果第一個擷取群組未參與配對)。就像正規表示式中的條件式,找到零長度配對的擷取群組會被視為已參與。使用命名擷取群組時,可以使用 (?{name}已配對:未配對) 在替換字串條件式中參照這些群組。您可以在條件式中使用完整的替換字串語法,包括巢狀條件式。如果條件式位於替換字串的結尾,您可以省略括號。替換字串條件式的語法與 C++ Boost 函式庫 中的語法相同。唯一的差異在於,Boost 在替換字串中的任何位置都使用括號進行分組,而 JGsoft V2 僅在條件式周圍辨識括號。這樣一來,您就不需要跳脫實際的括號。參照不存在群組的條件式在 JGsoft V2 中會出錯。在 Boost 中,這些條件式會插入「未配對」文字。

由於新增此語法,JGsoft V2 將 \?\:\(\) 視為跳脫字元,會逐字插入這四個標點符號之一。原始的 JGsoft 風格將這些視為實際的反斜線,會逐字插入反斜線和後面的標點符號到替換中。

| 快速入門 | 教學 | 工具與語言 | 範例 | 參考 | 書籍評論 |

| 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 |