vba-正則表達式3(其他符號,小括號,中括號)


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



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM