Option Explicit
'()
'可以讓括號內作為一個整體
Sub t29()
Dim regx As New RegExp
Dim sr
sr = "A3A3QA3A37BDFEA387A8"
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 = "A3A3QA3A37BDFEA387A8"
With regx
.Global = True
.Pattern = "((A3){2})Q\1" 'A3A3QA3A3 '這里是按從前往后,從外到里的順序來取
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" ’比如這里,先取((A3){2})的外層括號1,為取內層括號2,然后才是((B4){2})的3、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+(?=元)." '查找任意多數字后的元,查找到后從元以前開始查找,查找和\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+元|\d+塊"
Set mat = .Execute(sr)
For Each m In mat
Debug.Print m
Next m
End With
End Sub
最后:.* 任意長度字符串,貪婪的
.*? 與上面差不多,但是是非貪婪的