ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

    [复制链接]

TA的精华主题

TA的得分主题

发表于 2021-1-27 15:07 | 显示全部楼层
本帖已被收录到知识树中,索引项:文本处理和正则
收藏,谢谢分享!

TA的精华主题

TA的得分主题

发表于 2021-1-26 12:04 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
香川群子 发表于 2014-6-11 11:13
如果知道一点英文,理解记忆会更快。

\w

不错不错,浅显易懂

TA的精华主题

TA的得分主题

发表于 2021-1-26 12:01 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2021-1-20 10:01 | 显示全部楼层
本帖最后由 race01 于 2021-1-20 13:56 编辑

拜讀老師的正則,讓我受益良多,今天細讀反向引用,我用最笨的方法
一一的測試,並製表,供大家參考


  • 可以看出反向引用的"\2"視為字符或字詞,受到(...)的影响為相同內容
  • 反向引用也接受量詞{…},+,*,?,其放置位子會影响匹配
  • 以下有任意字符加入任何字符則不匹配,如(\d\d)\1 或(6\d)\1或(\d6)\1或(\w\d)
  • 最好使用 (\d+)\1 或和等價 (\d)\1 ,會匹配重複字詞(2個數),若用(\d*)\1或(\d?)\1除了2個數外,則會另外匹配出一堆的空字符
  • 在字串字符中用(\w+)\s+\1  ‘可以匹配兩個詞如”…This This…”
  • 若為連續重複中文字可以用(.)\1 或 ([x00-xff])\1


補充:
第一個正則還有兩個等價
(\d(\d))\2
(\d(\d)\2)

正則.png

TA的精华主题

TA的得分主题

发表于 2020-12-25 16:54 | 显示全部楼层
好贴,必须顶一下,楼主威武

TA的精华主题

TA的得分主题

发表于 2020-12-21 16:31 | 显示全部楼层
香川群子 发表于 2014-6-11 11:13
如果知道一点英文,理解记忆会更快。

\w

谢谢,谢谢你的总结,我们理解更容易了。

TA的精华主题

TA的得分主题

发表于 2020-12-8 14:48 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-12-7 16:53 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-12-7 09:51 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-12-6 19:28 | 显示全部楼层
本帖最后由 liu-aguang 于 2014-6-17 16:38 编辑


   (九)元字符字面字符表示法:转义符”\”
   正则表达式用了一部分字符作为元字符,那么怎样在正则表达式中表示这些元字符的字面字符呢?它提供了一个称为转义元字符,即反斜杠来表示.例:表示字面点号可用”\.”;表示反斜杠的字面字符,用”\\”表示.下面列举了如果匹配字面字符必须转义的元字符:










提示:
     1.注意并没有包括”]”,”-“,和”}”;
     2.普通字符组[…]内部,元字符的转义有自己的规则,在下一章专门介绍.
  例:正则表达式:
    \d\.\d
  可以匹配0.2,3.1….等小数.

(十)引用前面括号捕获的文本--反向引用  
  正则中,用形如\1,\2…的元字符序列表示前面捕获性括号内的字串(块),”\1”叫反向引用.如:
     (abc)\1
  可以匹配目标文本:abcabc,这里\1实际引用的是它左边括号中的内容”abc”.
          (abc)(defg)\2
  可以匹配目标文本:abcdefgdefg ,这里\2指的是从左至右第二个括号中的内容.
  实例:删除一段英文中重复的单词.
  目标文本:This this Is is an example.
  结果文本:this is an example
         正则表达式:
     (\w+)\s+\1
  代码:
Sub testrep()
    Dim reg, s$
    s = "This this is Is an exmapl"
    Set reg =CreateObject("vbscript.regexp")
    reg.Pattern = "(\w+)\s+\1"
    reg.Global = True
    reg.IgnoreCase = True
    s = reg.Replace(s, "$1")
    MsgBox s
End Sub
讨论:
  正则表达式中,”\w+”表示匹配连续出现的单词字符.在本例中,它会匹配至空格为止;”\s+”匹配一个或多个空格; “\1”它会匹配左边第一个出现的括号中的相同内容.所以,该正则会匹配诸如”1 1” “1111    1111”之类的文本.
  代码中Global属性设置为True,表示搜索所有匹配;IgnoreCase属性设置为True,表示忽略大小写,如”this” 与”THIS”视为同一单词.
  代码使用了正则对象的Repalce方法,用$1替换找到的匹配. 这个例中,共找到两个匹配”This this”与”Is is”;而$1在前面已经说过它保存的是第一个捕获性括号内的内容.在本例中分别是This与Is.最终通过替换实现了删除重复单词的目的.
  在VBA中使用反向引用要注意:
  1.    是表示八进制转义的字符还是反向引用?
  细心朋友已经发现,反向引用与字符的八制转义表示法,其结构是一样的.那么怎样区分它们呢?其规则是:
  “\num”:假如num是一个可以看作八进制的数字.
     如果num的值大于正则左前边捕获性括号个数,那么,它是一个八进制转义符;
  如果num的值小于或等于正则左前边捕获性括号个数,那么,它是一个反向引用;
  显然,如果它左前边没有捕获性括号,那么,它肯定是一个八进制转义符了.如果num数字中含有超过8,或9的数字,那么,它一定是反向引用.
  2.    \1,\2,…编号是根据前面”左半圆括号”从左至右出现的顺序确定的.
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-4-27 20:25 , Processed in 0.042711 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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