VB的正则表达式,不一样的分组捕获

   最近在写一个简单的转换程序,即将10.190.10.162之类的字符串转换成一个整数。我的思路很简单,提取出用"."符号分隔的四个数n1,n2,n3,n4,转换的结果=n1*256^3+n2*256^2+n3*256+n4。提取的方法首先想到的是正则表达式。于是:

Dim objRegExp As RegExp
    Dim objMatch As Match
    Dim colMatches   As MatchCollection
    Dim pt As String
    Dim nip As Double
   
    pt = "/b(?<n1>/d{1,3})/.(?<n2>/d{1,3})/.(?<n3>/d{1,3})/.(?<n4>/d{1,3}/b)"
    Set objRegExp = New RegExp
    objRegExp.Pattern = pt
    objRegExp.Global = True
     
    If (objRegExp.Test(ipstr) = True) Then
        Set colMatches = objRegExp.Execute(ipstr)
        For Each objMatch In colMatches   '' Iterate Matches collection.
            Dim n1

            Dim n2, n3, n4 As Long
            Dim x As Long
            Dim t As Long
            x = 256 ^ 3
            t = CLng(objMatch.SubMatches(0))
            n1 = CDec(t) * CDec(x)
            n2 = CLng(objMatch.SubMatches(1)) * 256 * 256
            n3 = objMatch.SubMatches(2) * 256
            n4 = objMatch.SubMatches(3)
            nip = n1 + n2 + n3 + n4
        Next
    end if

  正则表达式用了分组捕获,这是我常用的,原来在.net里C#的一个项目用过,写法没有问题。但是这里....。运行后,在执行objRegExp.Test(ipstr) 时出现了错误。多方调试后仍不行。干脆先从最简单的捕获试吧。试着把正则表达式写成"/b(/d{1,3})/.(/d{1,3})/.(/d{1,3})/.(/d{1,3}/b)",随后运行成功!

  按理说正则表达式对不同的编程语言是相类似的,但具体的实现会有些差异,一种语言环境下写的表达式在另一种语言环境可能不成立,就象这个例子。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值