许多程序设计语言都支持利用正则表达式进行字符串操作,基本都是直接内置,直接使用,而我们的vb6太老了,没有内建封装,只能通过第三方组件来使用,总结了下不外乎下面3种方法。
方法一:使用CreateObject("VBSCRIPT.REGEXP"),这是最常用的,与vb最融洽。范例:
Private Sub Command1_Click()
Dim reg As Object, s As String
Dim match As Object, matchs As Object
Set reg = CreateObject("vbscript.regExp")
reg.Global = True
reg.Pattern = "href='(.*?)'" '获取html中a标签中的网址
Set matchs = reg.Execute("<a href='baidu.com'>baidu</a>")
For Each match In matchs
Debug.Print match.submatches(0)
Next
End Sub
方法二:CreateObject("ScriptControl"),这个实际是调用JavaScript中的正则功能,不如上面的好用,获取值的话比较麻烦,不过要是只用replace还行,比较方便,比如下面的范例“删除非数字部分,只保留数字”:
Private Sub Command1_Click()
Dim sc As Object, s As String
Set sc = CreateObject("ScriptControl")
sc.Language = "JavaScript"
s = sc.Eval("'BCJT100116660013555022CCR5'.replace(/[^\d]/g, '');")
MsgBox s
End Sub
方法三:通过webbrowser,这个不常用使用也不方便,本质还是通过调用JavaScript的正则功能。需要引入一个webbrowser控件,然后用它的WebBrowser1.Document.parentWindow.ExecScript方法。
如果在你的程序中本身就需要用到webbrowser而不是为了用正则专门加入这个控件的情况下还是可以的,专门为了用正则而去引入一个webbrowser控件是不建议这么操作的。有时我们需要操作webbrowser中的一些的元素其实都可以直接在ExecScript方法中完成的,不用与vb交互。如果需要与vb交互得创建个js中间变量。例如下的范例“删除非数字部分,只保留数字”:
Private Sub Command1_Click()
WebBrowser1.Navigate "about:blank" '载入文本对象,不然下面无法使用Document对象
WebBrowser1.Document.parentWindow.ExecScript "var s='BCJT100116660013555022CCR5'.replace(/[^\d]/g,'');"
MsgBox WebBrowser1.Document.Script.s
End Sub
天啊,竟然这么短。可是如果就简单处理下字符要引入个对象就有点滥用了,还得看实际情况看使用场景。
方法四(赠品):通过调用外部程序mshta。严格来说这不是vb的了,因为值没有办法传递到vb里,只是显示值而已。
Private Sub Command1_Click()
Shell "mshta javascript:alert('BCJT100116660013555022CCR5'.replace(/[^\d]/g,''));close()"
End Sub