正則表示式工具 |
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 和部落格 |
VBScript 內建支援正則表示式。如果您使用 VBScript 在用戶端驗證網頁上的使用者輸入,使用 VBScript 的正則表示式支援將大幅減少您需要編寫的程式碼量。
Microsoft 在 Internet Explorer 版本 5.5 中對 VBScript 的正則表示式支援進行了一些重大強化。版本 5.5 實作了相當多在先前版本 VBScript 中遺漏的必要正則表示式功能。每當本網站提到 VBScript 時,這些陳述都指的是 VBScript 版本 5.5 的正則表示式支援。
基本上,Internet Explorer 5.5 實作 JavaScript 正則表示式風味。但 IE 5.5 在網頁標準方面的得分並不高。在它實作的 JavaScript 正則表示式和實際標準之間有相當多的差異。很幸運地,大部分都是不太可能影響您的邊緣案例。因此,本網站上關於 JavaScript 正則表示式風味所述的一切也適用於 VBScript。現代版本的 IE 在奇異模式中呈現網頁時仍然使用 IE 5.5 實作。在標準模式中,現代版本的 IE 非常嚴格地遵循 JavaScript 標準。即使已安裝現代版本的 IE,VBScript 正則表示式仍然使用 IE 5.5 實作。
JavaScript 和 VBScript 實作 Perl 風格的正規表示式。然而,它們缺少許多 Perl 和其他現代正規表示式風格中可用的進階功能
RegExp 物件的 1.0 版甚至缺少 惰性量詞 等基本功能。這是本網站不討論 VBScript RegExp 1.0 的主要原因。所有早於 5.5 版的 Internet Explorer 都包含 1.0 版的 RegExp 物件。除了 1.0 和 5.5 版之外,沒有其他版本。
你可以透過建立一個或多個 RegExp 物件的執行個體來在 VBScript 中使用正規表示式。這個物件讓你可以在字串中尋找正規表示式比對,並用其他字串取代字串中的正規表示式比對。VBScript 的 RegExp 物件提供的功能相當陽春。然而,對於 VBScript 中通常執行的簡單輸入驗證和輸出格式化任務來說,已經綽綽有餘。
RegExp 物件陽春特性的優點是它非常容易使用。建立一個,放入正規表示式,然後讓它比對或取代。只有四個屬性和三個方法可用。
建立物件後,將你想要搜尋的正規表示式指定給 Pattern 屬性。如果你想要使用文字正規表示式,而不是使用者提供的正規表示式,只要將正規表示式放在雙引號字串中即可。預設情況下,正規表示式會區分大小寫。將 IgnoreCase 屬性設定為 True 以不區分大小寫。 插入符號和美元符號 預設只會比對主旨字串的最開頭和最結尾。如果你的主旨字串包含多行,由換行符號分隔,你可以透過將 Multiline 屬性設定為 True,讓插入符號和美元符號 比對這些行的開頭和結尾。VBScript 沒有 讓點符號比對換行符號字元 的選項。最後,如果你想要 RegExp 物件傳回或取代所有比對,而不是只傳回或取代第一個比對,請將 Global 屬性設定為 True。
'Prepare a regular expression object
Set myRegExp = New RegExp
myRegExp.IgnoreCase = True
myRegExp.Global = True
myRegExp.Pattern = "regex"
設定 RegExp 物件的屬性後,你可以呼叫三個方法中的其中一個來執行三個基本任務之一。 Test 方法接收一個參數:要對其測試正規表示式的字串。 Test 傳回 True 或 False,表示正規表示式是否比對(字串的一部分)。在驗證使用者輸入時,你通常會想要檢查整個字串是否比對正規表示式。為此,請在正規表示式的開頭放置 插入符號,在結尾放置 美元符號,將正規表示式錨定在主旨字串的開頭和結尾。
執行方法也採用一個字串參數。它不會傳回 True 或 False,而是傳回一個 MatchCollection 物件。如果正規表示式完全無法與主旨字串相符,MatchCollection.Count 會為零。如果 RegExp.Global 屬性為 False(預設),MatchCollection 將只包含第一個相符項目。如果 RegExp.Global 為 true,Matches> 將包含所有相符項目。
取代方法採用兩個字串參數。第一個參數為主旨字串,而第二個參數為取代文字。如果 RegExp.Global 屬性為 False(預設),取代 將傳回主旨字串,其中第一個正規表示式相符項目(如果有的話)已用取代文字取代。如果 RegExp.Global 為 true,取代 將傳回主旨字串,其中所有正規表示式相符項目都已取代。
您可以指定一個空白字串作為取代文字。這將導致 取代 方法傳回主旨字串,其中已刪除所有正規表示式相符項目。若要將正規表示式相符項目重新插入為取代項目的一部分,請在取代文字中包含 $&。例如,若要在字串中用方括號括住每個正規表示式相符項目,請指定 [$&] 作為取代文字。如果正規表示式包含 擷取括號,您可以在取代文字中使用 反向參照。取代文字中的 $1 會插入與第一個擷取群組相符的文字,$2 會插入第二個相符群組,依此類推,直到 $9。若要在取代項目中包含一個實際的美元符號,請在傳遞給 取代 方法的字串中放置兩個連續的美元符號。
RegExp.Execute 方法傳回的 MatchCollection 物件是 Match 物件的集合。它只有兩個唯讀屬性。Count 屬性指出集合包含多少個相符項目。Item 屬性採用一個索引參數(範圍從零到 Count-1),並傳回一個 Match 物件。Item 屬性是預設成員,因此您可以將 MatchCollection(7) 寫成 MatchCollection.Item(7) 的簡寫。
處理集合中所有相符項目的最簡單方法是使用 For Each 建構,例如
' Pop up a message box for each match
Set myMatches = myRegExp.Execute(subjectString)
For Each myMatch in myMatches
msgbox myMatch.Value, 0, "Found Match"
Next
Match 物件有四個唯讀屬性。FirstIndex 屬性指出相符項目左方字串中的字元數。如果相符項目是在字串的最開頭找到,FirstIndex 會為零。如果相符項目從字串中的第二個字元開始,FirstIndex 會為一,依此類推。請注意,這與 VBScript Mid 函數不同,後者會在您將 start 參數設定為一的情況下擷取字串的第一個字元。Match 物件的 Length 屬性指出相符項目中的字元數。Value 屬性傳回相符的文字。
**SubMatches** 屬性為 Match 物件的字串集合。只有當您的正規表示式有 **擷取群組** 時,它才會保留值。該集合會為每個擷取群組保留一個字串。**Count** 屬性會指出集合中的字串數目。**Item** 屬性會取得一個索引參數,並傳回由擷取群組比對的文字。**Item** 屬性為預設成員,因此您可以將 **SubMatches(7)** 寫成 **SubMatches.Item(7)** 的縮寫。很遺憾地,VBScript 沒有提供任何方式來擷取擷取群組的比對位置和長度。
另一個遺憾的是,**SubMatches** 屬性**沒有**保留完整的正規表示式比對,例如 **SubMatches(0)**。相反地,**SubMatches(0)** 會保留由第一個擷取群組比對的文字,而 **SubMatches(SubMatches.Count-1)** 會保留由最後一個擷取群組比對的文字。這與大多數其他程式語言不同。例如在 **VB.NET** 中,**Match.Groups(0)** 會傳回整個正規表示式比對,而 **Match.Groups(1)** 會傳回第一個擷取群組的比對。請注意,這也與您可以在傳遞給 **RegExp.Replace** 方法的取代文字中使用的反向參照不同。在取代文字中,**$1** 會插入由第一個擷取群組比對的文字,就像大多數其他正規表示式風格一樣。**$0** 沒有被任何東西取代,而是直接插入。
我建立了一個 **範例網頁,顯示 VBScript 的正規表示式支援** 的實際應用。如果您使用的是 Internet Explorer,您現在可以在您的網路瀏覽器中嘗試看看。原始碼顯示在範例下方。
| 快速入門 | 教學 | 工具和語言 | 範例 | 參考 | 書籍評論 |
| 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/vbscript.html
頁面最後更新:2021 年 8 月 24 日
網站最後更新:2024 年 3 月 15 日
版權所有 © 2003-2024 Jan Goyvaerts。保留所有權利。