最近在写一个简单的转换程序,即将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)",随后运行成功!
按理说正则表达式对不同的编程语言是相类似的,但具体的实现会有些差异,一种语言环境下写的表达式在另一种语言环境可能不成立,就象这个例子。