1. #cs
  2. 学习deercao提供的正则30分钟资料的笔记
  3. 正则表达式就是个字符串处理语言,是用来“查找你想要的字符串和进行字符串的替换“。
  4. 网页、程序或文件中有关文本内容的处理部分都可以应用正则表达式完成。
  5. 在正则表达式中,元字符有特殊功能,如\w匹配“数字、字母、下划线、汉字”,这个在afan的正则表达式工具中有详细说明。
  6. 字符类:用[]括起来的就是一个字符类,如[aeu]匹配 a 或 e 或 u   , [.?!] 匹配 .   或   ?  或  ! ,此刻的字符类里的元字符就
  7. 不代表特殊的含义了。
  8. ([^\r]+) 我以前理解为”排除回车符号的至少一个什么字符的匹配“不如”匹配一个及以上非回车的字符“好理解,而且要注意其中
  9. ()的适用场景,用不用他效果有时差别真的很大!
  10. |  :就是多条件匹配,如用 \d{3}-\d{7}|\d{7} 匹配010-1234556或1234556,但注意别写成 \d{7}|\d{3}-\d{7},因为它只能匹配连续的
  11. 7位数字或3位数字-7位数字中的前7位了,我的理解是“在进行多条件匹配时,要把最大的匹配范围写到最前面,然后依次减小匹配范围”
  12. 分组 :用  () 括起来就是一个分组,如用于IP地址的匹配模式  (\d{1,3}\.){3}\d{1,3},分组()里的内容意思是”匹配1-3位的数字后面跟个
  13. .  的形式重复3次,最后再跟1个1-3位的数字。
  14. 分组还可以后向引用 ,如IP可用模式 (\d{1,3}\.){3}\d{1,3}\.匹配,就可以写成 (\d{1,3}\.){3}\1,这个\1就代表分组1(\d{3}\.)
  15. 所匹配的文本内容了。分组号是从 1 2 逐次命名的,\0代表正则表达式本身。
  16. 组名可用(?<GroupName>)定义,如(\d{1,3}\.){3}\d{1,3}中的组可(?<Group1>\d{3}\.)定义,引用则用\k<Group1>,完整语法为
  17. (?<Group1>\d{3}\.){3}\k<Group1> ,其中的 < >可用单引号 '  ' 替换,则变成了 (?'Group1'\d{3}\.){3}\k'Group1'  .
  18. 分组的3种语法:
  19. (exp)   匹配exp,并捕获文本到自动命名的组里
  20. (?<GroupName>exp)  匹配exp,并捕获文本到 自定义的<GroupName>组里
  21. (?:exp)  匹配exp,但不给组分配组号,也不捕获文本到组里
  22. 零宽断言语法(下面有例子) :
  23. (?=exp)   匹配exp前面的内容
  24. (?<=exp)  匹配exp后面的内容
  25. (?!exp)   可以看成 Str(?!exp),就是Str后不匹配exp
  26. (?<!exp)  可以看成(?<!exp)Str,就是Str前不匹配exp
  27. 注释:语法为 (?#comments)
  28. 例 2[0-4]\d(?#200-249)|25[0-5](?#250-255)|[01]?\d\d?(?#0-199)。
  29. 懒惰匹配和贪婪匹配        例  用 a.*b  匹配  aabab
  30. 贪婪模式是最大匹配模式,a.*b匹配以a开头以b结尾中间有任意数量字符的单词,则贪婪匹配整个字符串aabab而不是aab或ab
  31. 懒惰模式是在保证成功匹配的情况下进行最小匹配,a.*?b则匹配  aab(第1至第3个字母)  和  ab(第4至第5个字母)
  32. 为什么懒惰模式不是匹配 ab(第2至第3个字母),因最先匹配优于贪婪和懒惰匹配模式,懒惰模式下该例最先匹配aab,然后是 ab(第4至第5个字母)
  33. 懒惰模式的几种常用语法
  34. *? 重复任意次,但尽可能少重复
  35. +? 重复1次或更多次,但尽可能少重复
  36. ?? 重复0次或1次,但尽可能少重复
  37. {n,m}? 重复n到m次,但尽可能少重复
  38. {n,}? 重复n次以上,但尽可能少重复
  39. 平衡组和递归匹配  ---  根本没读懂?如果朋友有这方面的AUTOIT应用的例子,请提供!
  40. 曾经犯过的错误:
  41. 1。
  42. #ce
  43. ;example1  匹配数字
  44. #include <array.au3>
  45. Local $Str="我想匹配出字符串中的数字部分," & @CRLF & _
  46. "第1个数字:4869579" & @CRLF & _
  47. "第1个数字:010-4869579" & @CRLF & _
  48. "第2个数字:0201-48695795" & @CRLF & _
  49. "第2个数字:(010)-4895795" & @CRLF & _
  50. "第2个数字:010)-4895795" & @CRLF & _
  51. "第2个数字:(0201)-48695795" & @CRLF & _
  52. "第3个数字:230604198001025771" & @CRLF & _
  53. "第4个数字:23060419800102577A" & @CRLF & _
  54. "第4个数字:23060419800102577X" & @CRLF & _
  55. "第5个数字:230604198001026" & @CRLF & _
  56. "第6个数字:177608" & @CRLF & _
  57. "第7个数字:2010年12月17日"
  58. Local  $Result=StringRegExp($Str,"\b\d{3}-\d{7}\b|\b\d{7}\b",3);注意多条件书写的顺序,由左及右:大范围->小范围
  59. _ArrayDisplay($Result) ;OK
  60. Local  $Result=StringRegExp($Str,"\d{3}-\d{7}|\d{4}-\d{8}",3)
  61. _ArrayDisplay($Result) ;OK
  62. Local  $Result=StringRegExp($Str,"\(?0\d{2}[) -]?\d{8}",3);匹配结果不好!
  63. _ArrayDisplay($Result)
  64. Local  $Result=StringRegExp($Str,"\(0\d{2}\)[-]?\d{7}|\(0\d{3}\)[-]?\d{8}",3);匹配结果不好!
  65. _ArrayDisplay($Result)
  66. Local  $Result=StringRegExp($Str,"\d{17}[\d|X]|\d{15}",3)
  67. ;问题:23060419800102577a,只匹配前15位数字,难道是第一个条件\d{17}[\d|X]不匹配就用\d{15},结果显示其匹配的结果?结果是这样的。
  68. ;X,还以为是个元字符,有什么特殊含义!就是一个普通的匹配字符,[X]匹配X ,想多了!
  69. _ArrayDisplay($Result) ;OK
  70. Local $Result=StringRegExp($Str,"\b[1-9]\d{5}\b",3)
  71. ;Local $Result=StringRegExp($Str,"[^\d][1-9]\d{5}$");条条大路通罗马,感谢lpxx
  72. ;Local $Result=StringRegExp($Str,"[1-9]\d{5}",3) 这个提取不精确,只要是连续的6位数字它都匹配
  73. _ArrayDisplay($Result)
  74. Local $Result=StringRegExp($Str,"\d{4}[年|\-|\.]\d{1,2}[月|\-|\.]\d{1,2}日",3)
  75. _ArrayDisplay($Result)
  76. ;example2  匹配单词或汉字
  77. Local $Str="HI hi,I'm a newuser for autoit,his name is zgk!please 多多指教,邹国奎英语实在是说不过去,ahiha!"
  78. Local $Result=StringRegExp($Str,"hi",3);提取hi不精确
  79. _ArrayDisplay($Result)
  80. Local $Result=StringRegExp($Str,"\bhi\b",3);提取hi精确,区分大小写
  81. _ArrayDisplay($Result)
  82. Local $Result=StringRegExp($Str,"\b(?i)hi\b",3);(?i)表示不区分大小写,这样HI也可以匹配了,(?-i)表示区分大小写
  83. _ArrayDisplay($Result)
  84. Local $Result=StringRegExp($Str,"邹国奎",3)
  85. _ArrayDisplay($Result)
  86. ;example3  以下是对 ^的排除功能进行练习------------------------------------重点掌握
  87. Local $Num="192.168.1.10"
  88. Local $Result=StringRegExp($Num,'[^.]+',3)
  89. ;Local $Result=StringRegExp($Num,'[^.]*',3)
  90. _ArrayDisplay($Result)
  91. Local $Num="Default Gateway:       192.168.1.1"
  92. Local $Result=StringRegExp($Num,'Default Gateway:\h*[^\r]+',3)
  93. _ArrayDisplay($Result)
  94. Local $Result=StringRegExp($Num,'Default Gateway:\h*([^\r]+)',3)
  95. _ArrayDisplay($Result)
  96. ;很神奇的(),加上就只匹配字符串中的IP,不加就匹配整个字符串?   该例非常值得学习与思考  [^]与 () 的配合使用!
  97. Local $Num="Sharon Lee Smith, Design Works Incorporated, CA, 95012"
  98. Local $Result=StringRegExp($Num,'([^,]*),([^,]*),([^,]*),(.*)',3)
  99. ;Local $Result=StringRegExp($Num,'([^,]*),\w*',3)
  100. ;Local $Result=StringRegExp($Num,"(([^,]*),){3}(.*)",3)
  101. _ArrayDisplay($Result)
  102. Local $Num="Alexander Weatherworth, The Crafts Store, CA, 95014"
  103. Local $Result=StringRegExp($Num,'[^,]*',3)
  104. ;用*就会匹配出 4  个空格字符,因为当*表示0个数量,那[^,]*是匹配0个非,字符,而[^,]又必须匹配一个字符,空格就被匹配出来,依据具体
  105. ;环境,也可能匹配出  ,    或其他什么字符来
  106. ;如果将*改成+,那[^,]+是至少匹配一个非,字符,就自然不可能匹配空白字符了,不过[^,]+和([^,]+)这里效果是一样的。
  107. _ArrayDisplay($Result)
  108. ;那如果我想匹配出----   Alexander Weatherworth, The Crafts Store
  109. Local $result=StringRegExp($str,"Alexander Weatherworth, [^,]+",3)
  110. ;"Alexander Weatherworth,匹配本身, [^,]+至少匹配一个非,字符,到The Crafts Store,中的,时,就自然停止匹配了,想要的匹配结果就得到了
  111. ;如果只想匹配出---   The Crafts Store
  112. Local $result=StringRegExp($str,"Alexander Weatherworth, ([^,]+)",3);加 () 就OK,()的作用目前还没明白,当个公式记吧。
  113. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  114. Local $FilePath="c:\test\test2\test.txt"
  115. Local $Result=StringRegExp($FilePath,"[^\\]+",3)
  116. ;感觉就象stringsplit(),但如何用正则提取“文件路径 文件名 文件后缀”?不想用StringRegExpReplace()完成?
  117. _ArrayDisplay($Result)
  118. #cs
  119. 总结(感谢afan):
  120. 1.以上2例都是通过 [^] 来排除某个符号 .  or  ,  最后通过 + 来完成,注意不能用 * 代替  +,否则当 *匹配0次时,[^.]会匹配“空格或制表符”
  121. #ce
  122. ;example4   零宽断言4种语法的例子
  123. ;(?=exp)  匹配exp前面的内容(正向预搜索-感谢3mile)
  124. Local $Str="南京银行对同洲电子说:你也算3网融合的巨头,一直在阳痿!" & @CRLF & _
  125. "同洲电子对南京银行说:你也算银行的佼者,到处叫爹!" & @CRLF & _
  126. "nian jing yinhan  to tong  zhou dian zi said:i am your father. a ha!"
  127. Local $Result=StringRegExp($Str,".*(?=a)",3)
  128. _ArrayDisplay($Result)
  129. Local $Result=StringRegExp($Str,".*(?=到处叫爹)",3)
  130. _ArrayDisplay($Result)
  131. Local $Result=StringRegExp($Str,"\w+(?=到处叫爹)",3)
  132. ;问题:  .*就能实现“正向预搜索,  \w+就无任何反应?
  133. ;理解 :.*将 匹配范围定义到 ”行“,\w+将匹配范围定义到”单词“,不知道这样理解是否正确?但这样理解确实解释的通。比如
  134. ;\w+(?=到处叫爹) ,”到处叫爹"根本就不是一个单词,如果把它改成"diedaochujiaodie",那么就会匹配出 '  die  '   来,真费劲
  135. _ArrayDisplay($Result)
  136. #cs上面的正则对这个文本怎么不好使?
  137. ===========================================================================
  138. Interface List
  139. 0x1 ........................... MS TCP Loopback interface
  140. 0x2 ...00 50 56 c0 00 08 ...... VMware Virtual Ethernet Adapter for VMnet8
  141. 0x3 ...d8 5d 4c 70 db b3 ...... Realtek RTL8139 Family PCI Fast Ethernet NIC - 数据包计划程序微型端口
  142. ===========================================================================
  143. ===========================================================================
  144. Active Routes:
  145. Network Destination        Netmask          Gateway       Interface  Metric
  146. 0.0.0.0          0.0.0.0      192.168.1.1     192.168.1.7          20
  147. 127.0.0.0        255.0.0.0        127.0.0.1       127.0.0.1          1
  148. 192.168.1.0    255.255.255.0      192.168.1.7     192.168.1.7          20
  149. 192.168.1.7  255.255.255.255        127.0.0.1       127.0.0.1          20
  150. 192.168.1.255  255.255.255.255      192.168.1.7     192.168.1.7          20
  151. 192.168.128.0    255.255.255.0    192.168.128.1   192.168.128.1          20
  152. 192.168.128.1  255.255.255.255        127.0.0.1       127.0.0.1          20
  153. 192.168.128.255  255.255.255.255    192.168.128.1   192.168.128.1          20
  154. 224.0.0.0        240.0.0.0      192.168.1.7     192.168.1.7          20
  155. 224.0.0.0        240.0.0.0    192.168.128.1   192.168.128.1          20
  156. 255.255.255.255  255.255.255.255      192.168.1.7     192.168.1.7          1
  157. 255.255.255.255  255.255.255.255    192.168.128.1   192.168.128.1          1
  158. Default Gateway:       192.168.1.1
  159. ===========================================================================
  160. Persistent Routes:
  161. None
  162. 要求提取出”   Default Gateway: “   后面的   IP地址
  163. #ce
  164. Local   $file=FileOpen(@ScriptDir&"\temp.txt")
  165. Local   $str=FileRead($file)
  166. Local  $result=StringRegExp($str,"Default Gateway:\h*([^\r]+)",3)
  167. ;\h* 匹配任意数量水平空白字符
  168. ;[^\r]排除回车符,应该是以 \r 为分割点取后面的部分----我的理解有问题?
  169. ;[^\r]+  匹配若干个不是回车的字符(感谢水木子),这样确实能把后面的内容提取出来,关键在于如何不匹配   Default Gateway: 加上后面的
  170. ;0或多个空白水平符号,这时的 ()  ,就很关键,加上它就可以不匹配出,但该怎么理解它呢?
  171. ;其实  Local  $result=StringRegExp($str,"Default Gateway:\h*([^\s]+)",3)  更好理解,以 "空白符号为分割点取后面的部分“
  172. ;Local  $result=StringRegExp($str,"Default Gateway:\h*([^\r].*)",3) 将 + 改成  .*  ,也行
  173. _ArrayDisplay($result)
  174. Local  $result=StringRegExp($str,"\s\d+\.\d+\.\d+\.\d+\r",3)
  175. _ArrayDisplay($result)
  176. Local  $result=StringRegExp($str,"(?<=\s)\d+\.\d+\.\d+\.\d+(?=\s)",3);扩展一下,提取其中的所有IP形式
  177. _ArrayDisplay($result)
  178. Local  $result=StringRegExp($str,"(?<=\s)((\d+\.){3}\d+)(?=\s)",3);为什么不能将上面的正则模式改为这个模式?
  179. _ArrayDisplay($result)
  180. ;example5   学习利用[^] 或 ([^])与零宽断言的后匹配的比较
  181. Local $Str="南京银行对同洲电子说:你也算3网融合的巨头,一直在阳痿!" & @CRLF & _
  182. "同洲电子对南京银行说:你也算银行的佼者,到处叫爹!" & @CRLF & _
  183. "nian jing yinhan  to tong  zhou dian zi said:i am your father.a ha!"  & @CRLF & _
  184. "nian jing yinhang  to tong  zhou dian zi said:i Am your father.测试空格前后匹配    a     ha!" & @CRLF & _
  185. "abc123  ABC123  zhou dian zi said:i am your father.a ha!"
  186. Local $Result=StringRegExp($Str,"\bam\b",3);匹配单词 am ,OK!
  187. _ArrayDisplay($Result)
  188. Local $Result=StringRegExp($Str,"\b(?i)am\b",3);不区分大小写匹配单词 am Am,OK!
  189. _ArrayDisplay($Result)
  190. Local $Result=StringRegExp($Str,"\w+(?=a)",3);往前预匹配”  单词中有字母a的前面的内容   “,OK!
  191. _ArrayDisplay($Result)
  192. Local $Result=StringRegExp($Str,"(?<=a)\w+",3);往后预匹配”  单词中有字母a的后面的内容   “,OK!
  193. ;问题:只想匹配出  ha!  后面的 !      该怎么做?
  194. _ArrayDisplay($Result)
  195. Local $Result=StringRegExp($Str,"ha([^a].*)",3)
  196. ;;利用字符类的排除功能获得了 ”匹配的ha(不包括ha)后面的-行内容“   ,又加深了 [^] 与  ()  的应用,其实可以这样理解,如果 ([^a]),那么
  197. ;就是以匹配的内容ha后的 a 为分割点,捕获分割点后面的内容---应该是a后面的----一行内容
  198. ;没有()将会匹配以  ha (包括ha)开头的之后的行内容
  199. _ArrayDisplay($Result)
  200. Local $Result=StringRegExp($Str,"ha[^a].*",3)
  201. _ArrayDisplay($Result)
  202. Local $Result=StringRegExp($Str,".*(?=ha)",3)
  203. _ArrayDisplay($Result)
  204. ;匹配 ha 之前的行内容
  205. ;如果把 .*  改成 \w+ 就只能匹配单词中有ha部分的前面的内容了,差距咋这么大呢?一不小心头就大!!!
  206. Local $Result=StringRegExp($Str,".*(?=一直在阳痿)",3)
  207. _ArrayDisplay($Result)
  208. Local $Result=StringRegExp($Str,"(?<=一直在阳痿).*",3)
  209. _ArrayDisplay($Result)
  210. Local $result=StringRegExp($Str,"ni(?!i)",3)
  211. _ArrayDisplay($result)
  212. Local $result=StringRegExp($Str,"(?<![a-z])\d{3}",3);匹配不是以26个小写字母开头的3位数字
  213. _ArrayDisplay($result)
  214. #cs
  215. (?<=<(\w+)>).*(?=<\/\1>)  的解释:
  216. 匹配不包含属性的简单HTML标签内里的内容
  217. #ce
  218. ;examplp6  懒惰和贪婪模式
  219. Local $Str="aabab"
  220. Local $result=StringRegExp($Str,"a.*b",3)
  221. _ArrayDisplay($result)
  222. Local $result=StringRegExp($Str,"a.*?b",3);匹配不是以26个小写字母开头的3位数字
  223. _ArrayDisplay($result)

复制代码

转载于:https://www.cnblogs.com/swtool/p/6877276.html

学习deercao的正则笔记相关推荐

  1. Yann Lecun纽约大学《深度学习》2020课程笔记中文版,干货满满!

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! [导读]Yann Lecun在纽约大学开设的2020春季<深度学习>课 ...

  2. 使用html记笔记,开始学习HTML,并记下笔记

    开始学习HTML,并记下笔记. 外边距(不影响可见框大小,影像盒子位置) margin-top(上) right(右) bottom(下) left(左) "外边距也可以为一个负值,元素会反 ...

  3. js正则限制字符串长度_正则笔记(3)万字长文,慎点。

    正则讲了很久,也拖了很久,今天看看怎么用吧,后续更文应该会比较准勤快了.:-) 书接上文[正则笔记(2)].这次我们来看看正则的使用: (注:斜体表示为对应规则写出的正则表达式) 一. 常用的正则表达 ...

  4. 学习Python的做笔记神器——Jupyter Notebook

    学习Python的做笔记神器--Jupyter Notebook 给想学好Python的同学们安利一波,Jupyter Notebook是学习Python最好的做笔记环境,没有之一哦. Jupyter ...

  5. 《Python深度学习》第一章笔记

    <Python深度学习>第一章笔记 1.1人工智能.机器学习.深度学习 人工智能 机器学习 深度学习 深度学习的工作原理 1.2深度学习之前:机器学习简史 概率建模 早期神经网络 核方法 ...

  6. 《学习geometric deep learning笔记系列》第一篇,Non-Euclidean Structure Data之我见

    <学习geometric deep learning笔记系列>第一篇,Non-Euclidean Structure Data之我见 FesianXu at UESTC 前言 本文是笔者在 ...

  7. 《Python学习手册》读书笔记

    原文地址为: <Python学习手册>读书笔记 之前为了编写一个svm分词的程序而简单学了下Python,觉得Python很好用,想深入并系统学习一下,了解一些机制,因此开始阅读<P ...

  8. 《Data Structures and Algorithm Analysis in C》学习与刷题笔记

    <Data Structures and Algorithm Analysis in C>学习与刷题笔记 为什么要学习DSAAC? 某个月黑风高的夜晚,下班的我走在黯淡无光.冷清无人的冲之 ...

  9. 《我的PaddlePaddle学习之路》笔记一——PaddlePaddle的安装

    原文博客:Doi技术团队 链接地址:https://blog.doiduoyi.com/authors/1584446358138 初心:记录优秀的Doi技术团队学习经历 环境 系统:Ubuntu 1 ...

最新文章

  1. ***警告即将发起重大*** 谁会是下一个目标?
  2. 第十、十一周项目-阅读程序,写出这些程序的运行结果(3)
  3. docker部署项目 dockerfile 实战 SpringBoot、flask
  4. C++类里面的哪些成员函数是内联函数?
  5. 使用onnx包将pth文件转换为onnx文件
  6. APICloud方法
  7. java fangfa_java 集合
  8. MySQL 不落地迁移、导入 PostgreSQL - 推荐 rds_dbsync 1
  9. java注解类型_Java注解类型
  10. jqGrid时间转换
  11. 半波对称振子方向图_画好服装款式图的五个要点
  12. jdbc 连接 mysql 时的中文乱码问题
  13. Map集合常用方法总结
  14. 修复Cydia红字 flAbsPath on /var/lib/dpkg/status failed
  15. Python金融数据挖掘 第11章 复习思考题3 某年各省级行政区环境污染状况的统计数据(已经过标准化处理),现采用K均值聚类方法,编写Python程序将省级行政区分成4类。
  16. 前端开发实习面经总结
  17. apple id两步验证服务器,【安全可靠】Apple ID 两步验证支持中国地区 - 爱应用
  18. App安全软件防护能力检测
  19. 在大数据认知观和真实性不一样的?
  20. 我经历的日本东京交通

热门文章

  1. 技术如何秒懂你?阿里百万级QPS资源调度系统揭秘
  2. 《糖豆人:终极淘汰赛》:如何打造最难关卡「水涨爬高」
  3. 崩坏3日记:戴尔超限专武天天出,我们的快乐变为刷题式重复养成
  4. 前端性能优化-图像优化
  5. MySQL5.6 选项和变量整理
  6. innodb_flush_log_at_trx_commit配置
  7. runlevel的修改方法
  8. ffmpeg处理视频命令
  9. Spring Boot + Spring Cloud 实现权限管理系统 (系统服务监控)
  10. linux安装mysql的分支mariadb