正規表示式工具 |
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 和部落格 |
Boost 是 C++ 的免費原始碼函式庫。在下載並解壓縮後,您需要執行 bootstrap 批次檔或指令碼,然後執行 b2 --with-regex 來編譯 Boost 的正規表示式函式庫。接著將您解壓縮 Boost 的資料夾新增至 C++ 編譯器的包含路徑中。將該資料夾的 stage\lib 子資料夾新增至連結器的函式庫路徑中。然後您可以在 C++ 程式碼中新增 #include <boost/regex.hpp> 來使用 Boost 正規表示式。
如果您使用 C++Builder,您應該從 Embarcadero 下載適用於您特定 C++Builder 版本的 Boost 函式庫。您取得的 Boost 版本取決於您的 C++Builder 版本,以及您鎖定的目標是 Win32 還是 Win64。XE3 到 XE8 中的 Win32 編譯器,以及 C++Builder 10 Seattle 到 10.1 Berlin 中的傳統 Win32 編譯器都停留在 Boost 1.39。XE3 到 XE6 中的 Win64 編譯器使用 Boost 1.50。XE7 到 10.1 Berlin 中的 Win64 編譯器使用 Boost 1.55。C++Builder 10 及更新版本中的新 C++11 Win32 編譯器使用與 Win64 編譯器相同的 Boost 版本。
本網站涵蓋 Boost 1.38、1.39 和 1.42 到最新的 1.73。Boost 1.40 引進許多新的正規表示式功能,這些功能取自 Perl 5.10。但它也引進了一些嚴重的錯誤,直到 Boost 1.42 才修正。因此我們完全忽略 Boost 1.40 和 1.41。我們仍涵蓋 Boost 1.38 和 1.39(它們具有相同的正規表示式功能),因為傳統的 Win32 C++Builder 編譯器停留在這個版本。如果您使用其他編譯器,您絕對應該使用 Boost 1.42 或更新版本,以避免現在已成為舊錯誤的問題。您最好使用 Boost 1.47 或更新版本,因為這個版本會變更涉及反向參照的特定行為,如果您稍後從 1.47 之前的版本升級到 1.47 之後的版本,可能會變更部分正規表示式的行為。
在實務上,您大多會使用 Boost 的 ECMAScript 語法。它是預設語法,提供的功能遠多於其他語法。每當本網站上的教學提到 Boost 但未提到任何語法時,寫下的內容就適用於 ECMAScript 語法,可能適用或不適用於任何其他語法。您實際上只會在想要重複使用舊 POSIX 程式碼或 UNIX 指令碼中的現有正規表示式時使用其他語法。
Boost 文件喜歡談論與 Perl 和 JavaScript 相容,以及 boost::regex 如何在 C++11 中標準化為 std::regex。當我們將 Dinkumware 實作的 std::regex(包含在 Visual Studio 和 C++Builder 中)與 boost::regex 相比較時,我們發現類別和函式範本幾乎相同。您的 C++ 編譯器會很樂意編譯使用 boost::regex 的程式碼,就像編譯使用 std::regex 的相同程式碼一樣。因此,本網站上 std::regex 主題 中提供的範例程式碼,如果將 std 替換為 boost,就能順利與 Boost 搭配使用。
但是當您執行 C++ 應用程式時,Dinkumware 或 Boost 詮釋您的正規表示式會產生很大的差異。儘管兩者都提供相同的 六種語法,但這兩個函式庫的語法和行為並不相同。Boost 定義了 regex_constants::perl,這不是 C++11 標準的一部分。這實際上不是額外的語法,而只是 ECMAScript 和 JavaScript 的同義詞。實際的 JavaScript 和實際的 Perl 所使用的正規表示式類型有很大的不同。因此,很明顯地,將這些視為一種類型或語法的函式庫無法與任何一種相容。Boost 的 ECMAScript 語法是實際的 JavaScript 和 Perl 類型的交叉,並加入了一堆 Boost 特有的功能和特性。Dinkumware 的 ECMAScript 語法較接近實際的 JavaScript,但仍有顯著的行為差異。Dinkumware 沒有從 JavaScript 沒有的功能中借用任何功能。
下表重點說明了 std::regex 和 Boost 中的 ECMAScript 語法與實際的 JavaScript 和 Perl 之間最重要的差異。有些是功能集的明顯差異。但其他則是行為上的細微差異,可能會出乎意料地影響您。
功能 | std::regex | Boost | JavaScript | Perl |
---|---|---|---|---|
點符號符合換行符號 | 從未 | 預設 | 從未 | 選項 |
錨點符合換行符號 | 始終 | 預設 | 選項 | 選項 |
換行符號 | CR、LF | CR、LF、FF、NEL、LS、PS | CR、LF、LS、PS | LF |
對非參與群組的反向參考 | 符合空字串 | 自 1.47 版起失敗 | 符合空字串 | 失敗 |
空字元類別 | 無法符合 | 不可能 | 無法符合 | 不可能 |
自由間距模式 | 否 | 是 | 否 | 是 |
模式修改器 | 否 | 是 | 否 | 是 |
佔有量詞 | 否 | 是 | 否 | 是 |
命名捕獲 | 否 | .NET 語法 | 否 | .NET 和 Python 語法 |
遞迴 | 否 | 原子 | 否 | 回溯 |
子常式 | 否 | 回溯 | 否 | 回溯 |
條件 | 否 | 是 | 否 | 是 |
原子群組 | 否 | 是 | 否 | 是 |
原子群組回溯捕獲群組 | 不適用 | 否 | 不適用 | 是 |
字首和字尾邊界 | 否 | 是 | 否 | 否 |
標準 POSIX 類別 | 是 | 是 | 否 | 是 |
單字母 POSIX 類別 | 否 | 是 | 否 | 否 |
功能 | std::regex | Boost | JavaScript | Perl |
| 快速入門 | 教學 | 工具和語言 | 範例 | 參考 | 書籍評論 |
| 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/boost.html
頁面最後更新:2021 年 8 月 24 日
網站最後更新:2024 年 3 月 15 日
版權所有 © 2003-2024 Jan Goyvaerts。保留所有權利。