vba-正則表達式4(小括號細解)


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
 最后:.* 任意長度字符串,貪婪的

     .*?  與上面差不多,但是是非貪婪的


免責聲明!

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



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