| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1811 人关注过本帖
标题:求解:VBA正则表达式,为什么这个匹配不出来
只看楼主 加入收藏
醉里流年
Rank: 2
等 级:论坛游民
帖 子:7
专家分:20
注 册:2021-9-13
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
求解:VBA正则表达式,为什么这个匹配不出来
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://
问题出在哪里呀- -
搜索更多相关主题的帖子: VBA With 正则表达式 匹配 表示 
2022-06-28 16:44
apull
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:三体星系
等 级:版主
威 望:216
帖 子:1506
专家分:9241
注 册:2010-3-16
收藏
得分:10 
.Pattern = "(?=\D*)1\d{10}(?=\D)"
2022-06-28 23:55
约定的童话
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:56
帖 子:246
专家分:1442
注 册:2021-8-1
收藏
得分:10 
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
2022-06-29 06:48
醉里流年
Rank: 2
等 级:论坛游民
帖 子:7
专家分:20
注 册:2021-9-13
收藏
得分:0 
回复 2楼 apull
真的可以谢谢大佬,能解释一下为什么吗,难道正则表达式的规则也分很多种吗,我看的是那个测试网站的教程,怎么用它的测试工具可以匹配出来用VBA就不行呢
2022-06-29 09:23
醉里流年
Rank: 2
等 级:论坛游民
帖 子:7
专家分:20
注 册:2021-9-13
收藏
得分:0 
回复 3楼 约定的童话
1\d{10}不行吧,有超过11位数的也截取了部分匹配出来了
2022-06-29 09:24
醉里流年
Rank: 2
等 级:论坛游民
帖 子:7
专家分:20
注 册:2021-9-13
收藏
得分:0 
回复 2楼 apull
再次请教一下,一段文本如下:
13726567887电信手机号18158885555电信支付宝绑定号码133415626621617 匹配号码15917777777
如何匹配出所有的号码,即13726567887、18158885555、15917777777,而不把中间的15626621617匹配出来
2022-06-29 10:15
ggmmlol
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2022-12-3
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

程序代码:
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编辑过]

收到的鲜花
2022-12-03 05:42
快速回复:求解:VBA正则表达式,为什么这个匹配不出来
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014822 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved