Option Explicit
'^符號:限制的字符在最前面,如^\d表示以數字開頭
Sub T34()
Dim regex As New RegExp
Dim sr, mat, m
sr = "d234我345d43"
With regex
.Global = True
.Pattern = "^\d*"
Set mat = .Execute(sr)
For Each m In mat
Debug.Print m
Next m
End With
End Sub
'$符號:限制的字符在最后面,如 A$表示最后一個字符是A
Sub T3433()
Dim regex As New RegExp
Dim sr, mat, m
sr = "R243r"
With regex
.Global = True
.Pattern = "^\D.*\D$"
Set mat = .Execute(sr)
For Each m In mat
Debug.Print m
Next m
End With
End Sub
'\b
'空格(包含開頭和結尾)
Sub t26()
Dim regx As New RegExp
Dim sr
sr = "A12dA56 A4"
With regx
.Global = True
.Pattern = "\bA\d+"
Debug.Print .Replace(sr, "")
End With
End Sub
Sub T272()
Dim regex As New RegExp
Dim sr, mat, m
sr = "ad bf cr de ee"
With regex
.Global = True
.Pattern = ".+?\b"
Set mat = .Execute(sr)
For Each m In mat
If m <> " " Then Debug.Print m
Next m
End With
End Sub
'|
'可以設置兩個條件,匹配左邊或右邊的
Sub t27()
Dim regx As New RegExp
Dim sr
sr = "A12DA56 A4B34D"
With regx
.Global = True
.Pattern = "A\d+|B\d+"
Debug.Print .Replace(sr, "")
End With
End Sub
'\un 匹配 n,其中 n 是以四位十六進制數表示的 Unicode 字符。
'漢字一的編碼是4e00,最后一個代碼是9fa5
Sub t2722()
Dim regx As New RegExp
Dim sr
sr = "A12d我A愛56你 A4"
With regx
.Global = True
.Pattern = "[\u4e00-\u9fa5]"
Debug.Print .Replace(sr, "")
End With
End Sub
Option Explicit
'()
'可以讓括號內作為一個整體產生重復
Sub t29()
Dim regx As New RegExp
Dim sr
sr = "A3A3QA3A37BDFE87A8"
With regx
.Global = True
.Pattern = "((A3){2})" '相當於A3A3
Debug.Print .Replace(sr, "")
End With
End Sub
'取匹配結果的時候,括號中的表達式可以用 \數字引用
Sub t30()
Dim regx As New RegExp
Dim sr
sr = "A3A3QA3A37BDFE87A8"
With regx
.Global = True
.Pattern = "((A3){2})Q\1"
Debug.Print .Replace(sr, "")
End With
End Sub
Sub t31()
Dim regx As New RegExp
Dim sr
sr = "A3A3B4B4QB4B47BDFE87A8"
With regx
.Global = True
.Pattern = "((A3){2})((B4){2})Q\4"
Debug.Print .Replace(sr, "")
End With
End Sub
'用(?=字符)可以先進行預測查找,到一個匹配項后,將在匹配文本之前開始搜索下一個匹配項。 不會保存匹配項以備將來之用。
'例:截取某個字符之前的數據
Sub t343()
Dim regex As New RegExp
Dim sr, mat, m
sr = "100元8000元57元"
With regex
.Global = True
.Pattern = "\d+(?=元)" '查找任意多數字后的元,查找到后從元以前開始查找(因為元前的數字已被使用,
'所以只能從元開始查找)匹配 ()后面的,因為后面沒有設置,所以只顯示前面的數字,元不再顯示
Set mat = .Execute(sr)
For Each m In mat
Debug.Print m
Next m
End With
End Sub
'例:驗證密碼,條件是4-8位,必須包含一個數字
Sub t355()
Dim regex As New RegExp
Dim sr, mat, m
sr = "A8ayaa"
With regex
.Global = True
.Pattern = "^(?=.*\d).{4,8}$"
Set mat = .Execute(sr)
For Each m In mat
Debug.Print m
Next m
End With
End Sub
'用(?!字符)可以先進行負預測查找,到一個匹配項后,將在匹配文本之前開始搜索下一個匹配項。 不會保存匹配項以備將來之用。
Sub t356()
Dim regex As New RegExp
Dim sr, mat, m
sr = "中國建築集團公司"
With regex
.Global = True
.Pattern = "^(?!中國).*"
Set mat = .Execute(sr)
For Each m In mat
Debug.Print m
Next m
End With
End Sub
'()與|一起使用可以表示or
Sub t344()
Dim regex As New RegExp
Dim sr, mat, m
sr = "100元800塊7元"
With regex
.Global = True
.Pattern = "\d+(元|塊)"
'.Pattern = "\d+(?=元|塊)"
Set mat = .Execute(sr)
For Each m In mat
Debug.Print m
Next m
End With
End Sub
Option Explicit
'[]
'使用方括號 [ ] 包含一系列字符,能夠匹配其中任意一個字符。用 [^ ] 不包含一系列字符,
'則能夠匹配其中字符之外的任意一個字符。同樣的道理,雖然可以匹配其中任意一個,但是只能是一個,不是多個
'1 和括號內的其中一個匹配
Sub t29()
Dim regx As New RegExp
Dim sr
sr = "ABDC"
With regx
.Global = True
.Pattern = "[BC]"
Debug.Print .Replace(sr, "")
End With
End Sub
'2 非括號內的字符
Sub T35()
Dim regx As New RegExp
Dim sr
sr = "ABCDBDC"
With regx
.Global = True
.Pattern = "[^BC]"
Debug.Print .Replace(sr, "")
End With
End Sub
'3 在一個區間
Sub t38()
Dim regx As New RegExp
Dim sr
sr = "ABCDGWDFUFE"
With regx
.Global = True
.Pattern = "[a-h]"
Debug.Print .Replace(sr, "")
End With
End Sub
Sub t40()
Dim regx As New RegExp
Dim sr
sr = "124325436789"
With regx
.Global = True
.Pattern = "[1-47-9]"
Debug.Print .Replace(sr, "")
End With
End Sub