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

如何在 Xojo (REALbasic) 中使用正則表示式

Xojo,以前稱為 REALbasic,包含內建的 RegEx 類別。在內部,這個類別是基於開源的 PCRE 函式庫。對你這個 Xojo 開發人員來說,這表示 RegEx 類別會提供給你豐富的 Perl 相容正則表示式。本網站上的 正則表示式教學 沒有明確提到 Xojo。教學中所述關於 PCRE 的 regex 風格,也適用於 Xojo。唯一的例外是 不區分大小寫 和「多行」比對模式。在 PCRE 中,它們預設為關閉,而在 Xojo 中,它們預設為開啟。

Xojo 使用 PCRE 的 UTF-8 版本。這表示,如果您要處理從檔案或網路擷取的非 ASCII 資料,您需要使用 Xojo 的 TextConverter 類別將字串轉換成 UTF-8,然後再傳遞給 RegEx 物件。您也需要使用 TextConverter 將 RegEx 類別傳回的字串從 UTF-8 轉換回您的應用程式使用的編碼。

RegEx 類別

若要使用正規表示式,您需要建立 RegEx 類別的新執行個體。將您的正規表示式指定給 SearchPattern 屬性。您可以在 Options 屬性中設定各種選項,這是 RegExOptions 類別的執行個體。

若要檢查正規表示式是否符合特定字串,請呼叫 RegEx 物件的 Search 方法,並將主旨字串傳遞為參數。如果找到符合項,此方法會傳回 RegExMatch 類別的執行個體,如果找不到符合項,則傳回 Nil。若要在同一個主旨字串中找到第二個符合項,請再次呼叫 Search 方法,而不要傳遞任何參數。不要再次傳遞主旨字串,因為這樣會從字串的開頭重新開始搜尋。持續呼叫 Search,而不要傳遞任何參數,直到它傳回 Nil,以反覆運算字串中所有正規表示式符合項。

RegExMatch 類別

當 Regex.Search 方法找到一個符合項時,它會將符合項的詳細資料儲存在 RegExMatch 物件中。此物件有三個屬性。SubExpressionCount 屬性會傳回正規表示式中 擷取群組 的數量加上一。例如,它會傳回正規表示式 (1)(2) 的 3。SubExpressionString 屬性會傳回由正規表示式或擷取群組符合的子字串。SubExpressionString(0) 會傳回整個正規表示式符合項,而 SubExpressionString(1) 到 SubExpressionString(SubExpressionCount-1) 會傳回擷取群組的符合項。SubExpressionStartB 會傳回整個正規表示式或其中一個擷取群組符合項開始的位元組偏移量,具體取決於您傳遞給屬性的數字索引作為參數。

RegExOptions 類別

RegExOptions 類別有九個屬性,可為您的正規表示式設定各種選項。

Xojo RegEx 原始碼範例

'Prepare a regular expression object
Dim myRegEx As RegEx
Dim myMatch As RegExMatch
myRegEx = New RegEx
myRegEx.Options.TreatTargetAsOneLine = True
myRegEx.SearchPattern = "regex"
'Pop up all matches one by one
myMatch = myRegEx.Search(SubjectString)
While myMatch <> Nil
	MsgBox(myMatch.SubExpressionString(0))
	myMatch = myRegEx.Search()
Wend

搜尋和取代

除了在字串中尋找正規表示式比對之外,您還可以將比對取代為另一個字串。為此,請設定 RegEx 物件的 ReplacementPattern 屬性,然後呼叫 Replace 方法。將來源字串作為參數傳遞至 Replace 方法。此方法會傳回已套用取代的字串副本。RegEx.Options.ReplaceAllMatches 屬性會判斷是否僅取代第一個正規表示式比對,或是否取代所有正規表示式比對。

在 ReplacementPattern 字串中,您可以使用 $&$0\0 將整個正規表示式比對插入取代中。對於第一個擷取群組的比對,請使用 $1\1;對於第二個比對,請使用 $2\2,以此類推。

如果您希望更進一步控制取代方式,您可以像上述程式碼片段中一樣,反覆執行正規表示式比對,並針對每個比對呼叫 RegExMatch.Replace 方法。此方法有點名不符實,因為它實際上並未取代任何內容。相反地,它會傳回 RegEx.ReplacementPattern 字串,其中所有對比對和擷取群組的參照都已取代。您可以使用這些結果自行進行取代。如果您希望收集每個正規表示式比對的擷取群組組合,此方法也很有用。

| 快速開始 | 教學 | 工具和語言 | 範例 | 參考 | 書籍評論 |

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