VBScript: 正則表達式(RegExp對象)

RegExp對象是VBScript中用於提供簡單地正則表達式支持的對象。VBScript中全部和正則表達式有關的屬性和方法都有這個對象有關聯。html

1、RegExp對象的屬性和方法(三個屬性,三個方法)程序員

屬性:正則表達式

1. Global屬性: True or False, 指明模式是匹配整個字符串中全部與之相符的地方仍是隻匹配第一次出現的地方。默認值是False(表示只匹配第一次出現的地方)。spa

2. IgnoreCase屬性: True or False, 指明模式匹配是否大小寫敏感。默認是False(表示搜索爲大小寫敏感)。code

3. Pattern屬性:設置或返回用於搜索的正則表達式。orm

方法:htm

1. Execute方法:將正則表達式應用到字符串上並返回Matches集合。對象

2. Replace方法:替換在正則表達式搜索中找到的文本。ip

3. Test方法:對字符串執行正則表達式搜索,並返回一個布爾值說明匹配是否成功(True:匹配成功, False:匹配不成功)。ci

2、VBScript中的正則表達式字符

字符 描述
\ 表示下一個字符是特殊字符或文字常量
^ 匹配輸入的開頭
$ 匹配輸入的結尾
* 匹配前一個字符零次或屢次
+ 匹配前一個字符一次或屢次
? 匹配前一個字符零次或一次
. 匹配除換行符之外的任何單個字符
(pattern)

匹配並記住這個模式。能夠用[0]…[n]從結果的matches集合中獲取匹配到的字符串。要匹配括號自己,在前面加上斜槓-用"\("或"\)"

(?:pattern) 匹配但不捕獲模式,也就是不會存儲匹配結果供之後使用。這能夠用於使用"or"字符(|)合併模式的不一樣部分。例如,"anomal(?:y|ies)"比"anomaly|anomalies"要划算得多
(?=pattern) 當所要搜索的字符串匹配了模式的開頭部分時就接着匹配這一部分。非捕獲匹配,也就是說不會保存匹配結果供之後使用。例如,"Windows (?=95|98|NT|2000|XP|Vista)"能匹配"Windows Vista"中的Windows而不能匹配"Windows 3.1"中的Windows
(?!pattern) 與上一個相反,這會匹配模式中沒有出現的內容。非捕獲匹配。例如,"Windows (?!95|98|NT|2000|XP|Vista)"能匹配"Windows 3.1"中的Windows而不能匹配"Windows Vista"中的Windows
x|y 匹配x或y
{n} 準確地匹配n次(n必須是一個非負整數)
{n,} 至少匹配n次(n必須是一個非負整數-注意結尾的逗號)
{n,m} 至少匹配n次,最多匹配m次(m和n必須都是非負整數)
[xyz] 匹配其中包括的任一個字符(xyz表示一個字符集)
[^xyz] 匹配其中不包括的字符(^xyz表示一個字符集的補集)
[a-z] 匹配指定範圍內的字符(a-z表示字符的範圍)
[^m-z] 匹配指定範圍之外的字符(^m-z表示指定範圍的補集)
\b 匹配一個單詞邊界,這個位置在單詞和空格之間
\B 匹配一個非單詞邊界
\d 匹配數字。等價於[0-9]
\D 匹配非數字。等價於[^0-9]
\f 匹配換頁符
\n 匹配換行符
\r 匹配回車符
\s 匹配空白,包括空格、製表符、換頁符等。等價於"[\f\n\r\t\v]"
\S 匹配非空白的字符。等價於"[^\f\n\r\t\v]"
\t 匹配製表符
\v 匹配縱向製表符
\w 匹配字母、數字,以及下劃線。等價於"[A-Za-z0-9_]"
\W 匹配非字符數字。等價於"[^A-Za-z0-9\_]"
\. 匹配.
\| 匹配|
\{ 匹配{
\} 匹配}
\[ 匹配[
\] 匹配]
\( 匹配(
\) 匹配)
$num 匹配num,其中num是正整數。返回匹配結果的引用
\n 匹配n,其中n是八進制轉義符。八進制轉義符的長度應爲一、2或3
\uxxxx 匹配UNICODE形式的ASCII字符
\xn 匹配n,其中n是十六進制轉義符。十六進制轉義符必須是兩位長度
\\ 匹配\

3、實例

一、驗證電話號碼輸入:

Dim re, s, objMatch, colMatches
Set re = New RegExp
re.Pattern = "\([0-9]{3}\)[0-9]{4}-[0-9]{4}"
re.Global = True
re.IgnoreCase = True
s = InputBox("Enter your phone number in the following Format (XXX)XXXX-XXXX:")
If re.Test(s) Then
    MsgBox "Thank you!"
Else
    MsgBox "Sorry but that number is not in a valid format."
End If

二、分解URI:將URI分解成協議(如ftp、http等)、域名地址、頁面和路徑四個部分。

Dim re, s 
Set re = New RegExp
re.Pattern = "(\w+):\/\/([^/:]+)(:\d*)?([^#]*)"
re.Global = True
re.IgnoreCase = True
s = "http://www.wrox.com:80/misc-pages/support.shtml"
MsgBox re.Replace(s, "$1")
MsgBox re.Replace(s, "$2")
MsgBox re.Replace(s, "$3")
MsgBox re.Replace(s, "$4")

3. 檢查HTML元素: "<(.*)>.*<\/\1>"

4. 匹配空白: "^[\t]*$"

5. 匹配HTML註釋標籤: "^.*<!--.*—>.*$"

將上述匹配模式稍做修改,匹配HTML註釋標籤並清除HTML註釋:

Dim re, s
Set re = New RegExp
re.Pattern = "(^.*)(<!--.*-->)(.*$)"
re.Global = True
s= "<title>A Title</title><!-- a title tag -->"
If re.Test(s) Then
    MsgBox "HTML comment tags found."
Else
    MsgBox "No HTML comment tags found."
End If
MsgBox re.Replace(s,"$1" & "$3")

 

參考資料:《VBScript程序員參考手冊》

相關文章
相關標籤/搜索