ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: liu-aguang

[原创] 正则表达式入门与提高---VBA平台的正则学习参考资料

    [复制链接]

TA的精华主题

TA的得分主题

发表于 2015-8-16 14:13 | 显示全部楼层
本帖已被收录到知识树中,索引项:文本处理和正则
多谢楼主的精彩资料和耐心解答

TA的精华主题

TA的得分主题

发表于 2015-8-19 12:42 | 显示全部楼层
太厉害了,多谢分享!

TA的精华主题

TA的得分主题

发表于 2015-8-22 20:46 | 显示全部楼层

如何去除字符串中被小括号引用的部分(包括括号本身)
arr = Array("K33034639(15)", "MQ12(E5)66614", "(AudiA8)MQ1277833")
    With re
        .Pattern = "\(.*\)"
        .Pattern = "\(.*?\)"
        .Global = True
        For i = 0 To UBound(arr)
            Debug.Print .Replace(arr(i), "")
        Next
    End With
疑问:其中的两个表达式(一个贪婪的,一个非贪婪的)都能匹配成功,哪个的效率高?在什么情况下需要考虑抑制量词的贪婪性?
如果加入环视是否效率会更高?

TA的精华主题

TA的得分主题

发表于 2015-8-23 13:16 | 显示全部楼层
本帖最后由 zhouzhongchi 于 2015-8-23 15:32 编辑

疑问:"/"斜杠需要转义吗?如果需要,在什么情况下进行转义?
例:字串"a/b“正则"a\/b"或"a/b"都能匹配成功

疑问:字串"a123456b”  正则"a.*?b“  会发生几次回溯?
6次,正则"b"去匹配123456时不成功引起的回溯(将控制权交还给 ".*?" )。这样理解对不对?

疑问:字串"a123456b" 正则 "a(?:(?!b).)+b"  会发生几次回溯?具体的匹配过程是怎样的?

字串 "xyz“
正则1:"\w+“
正则2:”[a-z]+“
两个正则都能成功匹配,我们该选择哪个效率更高,还是没有影响?如果有影响,集合\w  大于 集合[a-z],集合大小与效率的关系是怎样的?


TA的精华主题

TA的得分主题

 楼主| 发表于 2015-8-23 21:15 | 显示全部楼层
zhouzhongchi 发表于 2015-8-23 13:16
疑问:"/"斜杠需要转义吗?如果需要,在什么情况下进行转义?
例:字串"a/b“正则"a\/b"或"a/b"都能匹配成 ...

所有的问题都涉及到匹配原理. 自己沉下心去研究一下原理,就会明白.

TA的精华主题

TA的得分主题

发表于 2015-8-24 16:56 | 显示全部楼层
正则只能说太神奇了,刚测试了下效果一样,还麻烦您解释下他们区别
我刚刚也是把你的入门篇全都下载来,回头慢慢看,总之难度还是不小的。非常感谢提醒,要不然,我自己是绝对想不到的。
[\s%]+|AA|ABC
(?:[\s%]|AA|ABC)+
现在只单单明白了您帮我写的这个的一点点,比如()+大改是对里面的循环,不理解的地方是?:这两个什么意思,还有[\s%]中的【】表示什么意思不理解,\s大改就是看不见的,%就是字符串%,aa和abc就是自定义的字符串。

老大呀,我刚才查了你的文章,就不知道理解是否有误,(?:...)+就是对相同结构的循环
(?:[\s%]|AA|ABC){3}这个我就不理解了,因为我把3变成不同的数字,好像变化差异特别大,我理解是我要是输入1000的话,也能得到目标结果,可惜。。。。。
(^AA.*\n){3} 用()分组标明后面量词{3}的作用范围,即行重复3次.

老大帮我看看理解错在哪里了。谢谢了

TA的精华主题

TA的得分主题

发表于 2015-8-25 21:09 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-9-4 12:44 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
liu-aguang 发表于 2014-6-14 17:17
3.    匹配优先量词总是匹配尽可多的字符      匹配优先量词:    ?       *    +     {n}    {n,m}     ...

看匹配原理这部分就象看侦探小说一样,有意思。

TA的精华主题

TA的得分主题

发表于 2015-9-4 13:20 | 显示全部楼层
liu-aguang 发表于 2014-6-15 13:49
六.    回溯与效率    NFA中的回溯是一个好东西,可以为正则表达式带来更多的功能,它也是很多正则引擎 ...

对这一段没明白,我试验的结果是:123456
Sub test()
   Dim re, mh, s$, k
   s = "123456X"
  With CreateObject("vbscript.regexp")
       .Pattern = "\d+"
       .Global = True
       Set mh = .Execute(s)
  End With
  For Each k In mh
      MsgBox k
  Next
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-9-4 13:47 | 显示全部楼层
小花鹿 发表于 2015-9-4 13:20
对这一段没明白,我试验的结果是:123456
Sub test()
   Dim re, mh, s$, k

才发现该部分的正则表达式都应该分别在前后增加^和$,如:
^\d+$
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-27 15:25 , Processed in 0.041735 second(s), 5 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表