首頁>Club>
11
回覆列表
  • 1 # 使用者3916807372217

    引用了Microsoft VBScript Regular Expressions 5.5 後就可以宣告正則相關物件了。主要有三個物件:RegExp、MatchCollection、Match。

      1. RegExp 這是VB使用正則表示式匹配模式的主要物件了。其提供的屬性用於設定那些用來比較的傳遞給 RegExp 例項的字串的模式。 其提供的方法以確定字串是否與正則表示式的特定模式相匹配。

      屬性:

      Pattern:一個字串,用來定義正則表示式。

      IgnoreCase:,則忽略英文字母大小的匹配,False對大小寫進行匹配。

      Global:設定一個布林值或返回一個布林值,該布林值指示一個模式是必須匹配整個搜尋字串中的所有搜尋項還是隻匹配第一個搜尋項。

      MultiLine:這個MS沒有介紹。查了一下資料,設定一個布林值或返回一個布林值,是否在串的多行中搜索。如果允許匹配多行文字,則multiline為true,如果搜尋必須在換行時停止,則為false 。

      方法:

      Execute:返回一個 MatchCollection 物件,該物件包含每個成功匹配的 Match 物件。

      Replace:MS沒有介紹,這是返回一個將匹配字元替換為指定字元的字串。

      Test:返回一個布林值,該值指示正則表示式是否與字串成功匹配。

      2. MatchCollection 是集合物件,包含有關匹配字串的資訊,該物件包含每個成功匹配的 Match 物件。

      屬性

      Count:匹配物件的總數。

      Item:匹配物件的索引。

      3. Match 是成功匹配的物件。

      屬性:

      FirstIndex:匹配物件所匹配字串的起始位置。

      Length:匹配物件所匹配字串的字元長度。

      SubMatches:匹配物件所匹配結果的子項。

      Value:匹配物件所匹配的值。

    見下面的幾個簡單示例:

    1.匹配過程

    Function TestRegExp(myPattern As String, myString As String)

    Dim objRegExp As RegExp "定義物件

    Dim objMatch As Match

    Dim colMatches As MatchCollection "物件包含有關匹配字串的資訊

    Dim RetStr As String

    Set objRegExp = New RegExp

    objRegExp.Pattern = myPattern "傳入引數,用來定義正則表示式

    objRegExp.IgnoreCase = True

    objRegExp.Global = True

    If objRegExp.Test(myString) Then "正則表示式與字串成功匹配

    Set colMatches = objRegExp.Execute(myString)

    For Each objMatch In colMatches

    RetStr = RetStr & "發現位置" & objMatch.FirstIndex & ". 匹配值是 "" & objMatch.Value & ""." & vbCrLf

    Next

    Else

    RetStr = "String Matching Failed"

    End If

    TestRegExp = RetStr

    End Function

    Private Sub Command1_Click()

    MsgBox (TestRegExp("is.", "ISss1 is2 IS3 is4"))

    End Sub

    2. RegExp的Test方法:

    Function bTest(ByVal s As String, ByVal p As String) As Boolean

    Dim re As RegExp

    Set re = New RegExp

    re.IgnoreCase = False "設定是否匹配大小寫

    re.Pattern = p

    bTest = re.Test(s)

    End Function

    Private Sub Command1_Click()

    Dim s As String

    Dim p As String

    "測試字串中是否包含數字:

    p = "\d+"

    MsgBox bTest(s, p)

    "測試字串中是否全是由數字組成:

    p = "^\d+$"

    MsgBox bTest(s, p)

    "測試字串中是否有大寫字母:

    p = "[A-Z]+"

    MsgBox bTest(s, p)

    End Sub

    3. RegExp的Replace方法:

    Function StrReplace(s As String, p As String, r As String) As String

    Dim re As RegExp

    Set re = New RegExp

    re.IgnoreCase = True

    re.Global = True

    re.Pattern = p

    StrReplace = re.Replace(s, r)

    End Function

    Private Sub Command2_Click()

    Dim s As String"字串

    Dim p As String"正則表示式

    Dim r As String"要替換的字串

      "以下程式碼是替換郵箱地址

    p = "w+@w+.w+"

    r = "[email protected]"

    s = StrReplace(s, p, r)

    Debug.Print s

    End Sub

    4. Match的SubMatches屬性:

    Private Sub Command3_Click()

    Dim re As RegExp

    Dim mh As Match

    Dim mhs As MatchCollection

    Dim inpStr As String

    Set re = New RegExp

    re.Pattern = "(w+)@(w+).(w+)""同樣是匹配地址,注意和上例的不同

    Set mhs = re.Execute(inpStr)

    Set mh = mhs(0)"只有一個匹配

    Print "電子郵件地址是: " & mh.Value"這裡是匹配的內容

    Print "使用者名稱是:" & mh.SubMatches(0)"第一個括號中的內容

    Print "郵箱是:" & mh.SubMatches(1)"第二個括號中的內容

    Print "域名是:  " & mh.SubMatches(2)"第三個括號中的內容

  • 中秋節和大豐收的關聯?
  • 如果結婚告訴朋友但他沒來,也沒隨禮,後來他結婚叫你去,請問怎麼辦?