注册 登录
编程论坛 VB6论坛

求解:VBA正则表达式,为什么这个匹配不出来

醉里流年 发布于 2022-06-28 16:44, 2034 次点击
VBA代码如下,运行后提示错误5017,应用程序定义或对象定义错误
程序代码:
Sub 正则匹配()
Text = "电信手机号18158885555 电信支付宝绑定号码13345626621617 匹配号码15917777777以上"
With CreateObject("Vbscript.Regexp")
  .Global = True 'True表示匹配所有, False表示仅匹配第一个符合项
  .IgnoreCase = True  'True表示不区分大小写, False表示区分大小写
  .Pattern = "(?<=\D)1\d{10}(?=\D)"   '匹配字符模式
  Set mMatches = .Execute(Text)   '执行正则查找,返回所有匹配结果的集合,若未找到,则为空
  For Each mmatch In mMatches
    MsgBox mmatch.Value
  Next
End With
End Sub

用下面的测试工具测试,却可以匹配出来
https://
问题出在哪里呀- -
6 回复
#2
apull2022-06-28 23:55
.Pattern = "(?=\D*)1\d{10}(?=\D)"
#3
约定的童话2022-06-29 06:48
Set Reg = CreateObject("vbscript.regexp")
    With Reg
        .Global = True
        .Pattern = "1\d{10}" '提电话
        Set p = Reg.Execute(Cells(2, 1))
    End With
    For Each t In p
        If s = "" Then
            s = t
        Else
            s = s & Chr(10) & t
        End If
    Next
#4
醉里流年2022-06-29 09:23
回复 2楼 apull
真的可以谢谢大佬,能解释一下为什么吗,难道正则表达式的规则也分很多种吗,我看的是那个测试网站的教程,怎么用它的测试工具可以匹配出来用VBA就不行呢
#5
醉里流年2022-06-29 09:24
回复 3楼 约定的童话
1\d{10}不行吧,有超过11位数的也截取了部分匹配出来了
#6
醉里流年2022-06-29 10:15
回复 2楼 apull
再次请教一下,一段文本如下:
13726567887电信手机号18158885555电信支付宝绑定号码133415626621617 匹配号码15917777777
如何匹配出所有的号码,即13726567887、18158885555、15917777777,而不把中间的15626621617匹配出来
#7
ggmmlol2022-12-03 05:42
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

程序代码:

Sub Test()
S="13726567887电信手机号18158885555电信支付宝绑定号码133415626621617 匹配号码15917777777"
Set Reg = CreateObject("VBScript.RegExp")
Reg.Global = True
Reg.Pattern = ".*?(?:\D|^)(1[3-9]\d{9})(?!\d)|.+"
S = Reg.Replace(S,"$1 ")
Msgbox S
End Sub


[此贴子已经被作者于2022-12-3 05:44编辑过]

1