zoukankan      html  css  js  c++  java
  • VB 正则表达式应用

      最近在用VB6解决一个网页解析的应用,涉及到了正则。如何在VB6中使用正则表达式,这个在MS网站上有介绍,不过介绍的不是很全面。下面结合MS网站的内容和搜索到的东西,自己汇总一下。

      引用了Microsoft VBScript Regular Expressions 5.5 后就可以声明正则相关对象了。主要有三个对象:RegExp、MatchCollection、Match。
      
      1. RegExp 这是VB使用正则表达式匹配模式的主要对象了。其提供的属性用于设置那些用来比较的传递给 RegExp 实例的字符串的模式。 其提供的方法以确定字符串是否与正则表达式的特定模式相匹配。

      属性:
      Pattern:一个字符串,用来定义正则表达式。
      IgnoreCase:一个布尔值属性,指示是否必须对一个字符串中的所有可能的匹配进行正则表达式测试。这是MS的解释,有点费解,实际使用中的实例是,如果True,则忽略英文字母大小的匹配,False对大小写进行匹配。
      Global:设置一个布尔值或返回一个布尔值,该布尔值指示一个模式是必须匹配整个搜索字符串中的所有搜索项还是只匹配第一个搜索项。
      MultiLine:这个MS没有介绍。查了一下资料,设置一个布尔值或返回一个布尔值,是否在串的多行中搜索。如果允许匹配多行文本,则multiline为true,如果搜索必须在换行时停止,则为false 。

      方法:
      Execute:返回一个 MatchCollection 对象,该对象包含每个成功匹配的 Match 对象。
      Replace:MS没有介绍,这是返回一个将匹配字符替换为指定字符的字符串。
      Test:返回一个布尔值,该值指示正则表达式是否与字符串成功匹配。

      2. MatchCollection 是集合对象,包含有关匹配字符串的信息,该对象包含每个成功匹配的 Match 对象。

      属性
      Count:匹配对象的总数。
      Item:匹配对象的索引。

      3. Match 是成功匹配的对象。

      属性:
      FirstIndex:匹配对象所匹配字符串的起始位置。
      Length:匹配对象所匹配字符串的字符长度。
      SubMatches:匹配对象所匹配结果的子项。
      Value:匹配对象所匹配的值。

      相关示例参照MS的网站:http://support.microsoft.com/kb/818802/zh-cn。MS上没有介绍的几个属性和方法的使用,见下面的几个简单示例:

      1. RegExp的Test方法:

    Function bTest(ByVal s As String, ByVal p As StringAs 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
            
        s 
    = "我的邮箱: test@163.com 。欢迎致电!"

        
    '测试字符串中是否包含数字:
        p = "/d+"
        
    MsgBox bTest(s, p)
     
        
    '测试字符串中是否全是由数字组成:
        p = "^/d+$"
        
    MsgBox bTest(s, p)

        
    '测试字符串中是否有大写字母:
        p = "[A-Z]+"
        
    MsgBox bTest(s, p)
        
    End Sub

      2. RegExp的Replace方法:

    Function StrReplace(s As String, p As String, r As StringAs 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     '要替换的字符串

      
    '以下代码是替换邮箱地址
         
        s 
    = "我的E-mail: Test@163.com 。欢迎致电!"
        p 
    = "w+@w+.w+"
        r 
    = "E_Mail@sohu.net"
        s 
    = StrReplace(s, p, r)
        Debug.Print s
        
    '结果:我的E-mail: E_Mail@sohu.net 。欢迎致电!

    End Sub

      3. Match的SubMatches属性:

    Private Sub Command3_Click()

        
    Dim re As RegExp
        
    Dim mh As Match
        
    Dim mhs As MatchCollection
        
    Dim inpStr As String
        
        inpStr 
    = "我的E-mail: lucky@163.com 。欢迎致电!"
        
    Set re = New RegExp
        re.Pattern 
    = "(w+)@(w+).(w+)"         '同样是匹配地址,注意和上例的不同
        Set mhs = re.Execute(inpStr)
        
    Set mh = mhs(0)                                      '只有一个匹配
        
        Debug.Print 
    "电子邮件地址是: " & mh.Value                '这里是匹配的内容
        Debug.Print "用户名是:             " & mh.SubMatches(0)  '第一个括号中的内容
        Debug.Print "邮箱是:                 " & mh.SubMatches(1)  '第二个括号中的内容
        Debug.Print "域名是:           " & mh.SubMatches(2)  '第三个括号中的内容
        
    End Sub
  • 相关阅读:
    mac 个人账户环境变量位置
    版本控制工具Git
    xmind导图用例转换为表格用例
    Mysql清空表(truncate)与删除表中数据(delete)的区别
    log4j日志级别及使用规范
    洛谷 P3807 【模板】卢卡斯定理
    jmeter环境配置与java环境配置
    NOI2020乱搞记
    Re:ゼロから始める文化課生活
    阅读书单
  • 原文地址:https://www.cnblogs.com/xxaxx/p/2141576.html
Copyright © 2011-2022 走看看