[Hỏi]Biểu thức chính quy

tuhocvba

Administrator
Thành viên BQT
Mã:
Function GetCanValue(ByVal str As String) As String
  Dim reg As Object
  Dim s   As String, op As String
  Dim Match, Matches
  Set reg = CreateObject("VBScript.RegExp")

  With reg
      .Pattern = "(\s)([0-9a-f]{2})(\s)"
      .IgnoreCase = True
      .Global = True
  End With
  Set Matches = reg.Execute(str)
 
  s = ""
  op = ""
  For Each Match In Matches
      s = Match.Value
      op = op & s
      If s = "" Then Exit Function
      

  Next Match
  GetCanValue = op
  Set reg = Nothing
End Function

Sub vidu()
        Dim s As String
        s = "368.752793 8  48A             Rx   d 8 AE 68 77 01 60 01 20 C4  Length = 111111 BitCount = 111 ID = 1246"
        s = GetCanValue(s)
        MsgBox s
End Sub
Giá trị kỳ vọng là AE 68 77 01 60 01 20 C4.
Hiện tại kết quả là: AE 77 60 20
Ai biết xin mách dùm!
 

NhanSu

SMod
Thành viên BQT
VBA regex không giống regex trong một số ngôn ngữ khác, regex tìm kiếm chuỗi match thứ 2 sau khi kết thúc chuỗi thứ nhất, mà chuỗi match thứ 1 kết thúc bởi ký tự space nên chuỗi 68 không match do không có ký tự bắt đầu. Để lách được quy tắc này, ta nhân bản 1 ký tự space thành 2 bằng lệnh
s=replace(s," "," ")
 
Top