前端 | 2. 正则 - Go语言中文社区

前端 | 2. 正则


作者博客:清自以敬

欢迎任何形式转载,但请务必注明出处。

笔者会随时更正文章内容,但由于笔者水平有限,如果文章或代码有错误或者表述不当之处,还望不吝赐教。

文章中的错误笔记链接

  • 如链接笔记出现页面丢失,则笔记一般为私密状态,完善ing,完善后会公开,还望见谅。
  • 如链接笔记是一个错误链接或者空链接,可以评论区回复一下,笔者会修正链接。

上篇:前端 | 1. HTML&CSS

下篇:前端 | 3. JavaScript基础


1.转义

转义的作用
当某个字符在表达式中具有特殊含义,例如字符串引号中出现了引号,为了可以使用这些字符本身,而不是使用其在表达式中的特殊含义,则需要通过转义符“”来构建该字符转义字符以正常使用。

规定的转义字符表:
转义字符

  • 红框之上的字符还有“”都是非打印控制字符
  • 对于转义符""的出现,都是具有特殊含义的,表示转义符,所以转义字符表对此规定了转义字符。
    最后的俩个形式则是为了表示ascii范围内其他字符,以便特殊表达式的使用,例如对正则字符组中的^(脱字符),可以以x5e表示

2.正则表达式初步

正则作用:规定了字符串的组成规则,通过其匹配模式对目标字符串进行匹配字符或位置。

2.1.匹配字符

正则表达式对字符的匹配,形象点就是横向匹配和纵向匹配这两个方式。
纵向就像密码锁一个播轮(例如字符组),横向就像选择播轮个数(例如量词)

2.1.1.组成元素

字面量:正常的字符,用来精准匹配一个具体字符

字符组:

匹配一个符合方括号内逻辑的内的字符。

逻辑符号:^(非)、- (区间或)、直接拼接(或)。

案例:

1,[ac]:匹配元素==(a||c)
2,[^ac]:匹配元素!=(a&&c)

  • 方括号内开头的^才被认为是逻辑判断符号,其他位置都会被认为是字符元素

3, [a-c]:匹配元素==(a||b||c)
4,[0-2]:匹配元素==(0||1||2)
5,[02]:匹配元素==(0||2)

  • 允许在方括号内进行拼接以扩大范围,例如[a-zA-Z0-9_],即匹配字母或者数字或者下划线

  • 如果要匹配逻辑符号,则需要使用其转义字符,或者破坏组合顺序,比如[az^]

  • 一些常见的简写形式:

    • d[0-9]
      d :digit(数字)
      大写的D则表示非数字[^0-9]
    • w:[a-zA-Z0-9_]
      w:word(单词)
      大写的W则表示非单词[^a-zA-Z0-9_]
    • s:[ tvrnf]
      大写S表示非空白
      s:space(空白)。表示空格、水平制表、垂直制表、回车(return,回到行首)、换行(newline,新行)、换页(form feed,表单)
    • .:[^nru2028u2029]。匹配除了换行符(rn)合行结束符(u2028u2029)

    组合上述即可得到通配符,如[dD][^]也表示通配符,不对任何字符做非操作自然就是任意字符。

量词

匹配字符X的出现次数。量词符号:?、+、*、{}

检查模式:

1,贪婪型:尽可能多的检查

  • X?:0||1

    ?可认为是询问问有还是没有

  • X+:>=1

  • X*:>=0

  • X{n}:==n

  • X{n,}:>=n

  • X{n,m}:[n,m]

2,懒惰型:尽可能少的检查

  • 贪婪型基础上多加个?即可。可理解为有没有瞅到?瞅到就继续走。

分支:

(p1|p2|…|pn),“|”表示分支,短路或进行匹配一个p,匹配到了一个就结束匹配。
"()"就是括号的作用。即标识整体

2.1.2.基础正则的设计

分析值的构成情况,选择纵向播轮范围(字符组),选择播轮个数(量词),有必要再补上分支结构。

案例:

1,筛选可构成十六进制色码的部分:

  • #字面量,字符组为[0-9a-fA-F],3位或6位
  • #([0-9a-fA-F]{3}|[0-9a-fA-F]{6})

2,筛选可构成时分制时间的部分(24小时):

  • 4个位数字字符组和一个字面量“:”
  • 小时部分取值为0-24,([0-1]d|2[0-3])
  • 分钟为0-59,[0-5]d
  • 结果:([0-1]d|2[0-3]):[0-5]d

如果对于例如01这样的,允许只出现1,可以将0位选择量词"?"

即:(0?[0-9]|1[0-9]|2[0-3]):(0?d|[1-5]d)

3,筛选可构成年月日日期的部分(-连接):

  • 年4位字符组、月1位或2位字符组、日1为或2位字符组,字面量“-”连接。
  • 年:d{4}
  • 月:(0?d|1[0-2])
  • 日:(0?d|[12]d|3[01])

4,筛选可组成windows下绝对路径的部分:

  • 盘符字符组,1位字符组和字面量":",[a-zA-Z]:\
  • 分隔符转义\
  • 目录层级剔除非法字符,贪婪型长度大于1,个数>=1。([^\/:*?"<>|s u2088u2029]+\)*
  • 最终目标可能是个文件,也可能是文件夹([^/:*?"<>|s u2088u2029]+)?
版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_45791147/article/details/102716271
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

推荐文章

猜你喜欢