美文网首页
关于正则表达式的一些感悟

关于正则表达式的一些感悟

作者: KayFelicities | 来源:发表于2018-06-19 16:41 被阅读0次

这两天又看了一下正则表达式的入门手册,有些原来没有注意到的东西,记录一下。

匹配类型

有些元字符只匹配位置

  • \b
  • ^
  • $

有些元字符只匹配数量

  • *
  • +
  • ?

[]中是用来放匹配的字符的,所以匹配位置的东西在里面是无效的

比如我想匹配0:忙,1:闲中的枚举,如果我用下面的正则是无法匹配的:
([\dH]+):(.*?)[,;$]
因为$[]中表示的是字符而不是位置. 正确的写法是:
([\dH]+):(.*?)([,;]|$)

.*?的解释

.匹配任意字符,*匹配任意数量,?使用懒惰模式

后向引用

例:\b(\w+)\b\s+\1\b匹配重复的单词,像go go, 或者kitty kitty

零宽断言

断言的目的是使用字符串匹配位置但不匹配任何字符串,即被断言匹配的字符串仍然可以继续被匹配。另一种角度来说,可以用来判断字符串中是否包含某字符串(因为不会匹配任何字符串)。

  • (?=exp) 零宽度正预测先行断言
  • (?<=exp) 零宽度正回顾后发断言
  • (?!exp) 零宽度负预测先行断言
  • (?<!exp) 零宽度负回顾后发断言
    例:\b\w*q(?!u)\w*\b匹配包含后面不是字母u的字母q的单词
    理解:正与负其实是==和!=的意思;先和后其实是匹配所在位置右边和左边的意思(因为这个写在正则表达式中间分不清是与前面的东西配合还是与后面的东西配合)。

例:

  • 匹配后面为_path,结果为product
    'product_path'.scan
    /(product)(?=_path)/
    (?<=exp):零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式exp
  • 匹配前面为name:,结果为wangfei
    'name:wangfei'.scan
    /(?<=name:)(wangfei)/
    (?!exp):零宽度负预测先行断言,断言此位置的后面不能匹配表达式exp。
  • 匹配后面不是_path
    'product_path'.scan
    /(product)(?!_path)/
  • 匹配后面不是_url
    'product_path'.scan
    /(product)(?!_url)/
    (?<!exp):零宽度负回顾后发断言来断言此位置的前面不能匹配表达式exp
  • 匹配前面不是name:
    'name:angelica'.scan
    /(?<!name:)(angelica)/
  • 匹配前面不是nick_name:
    'name:angelica'.scan
    /(?<!nick_name:)(angelica)/

多行模式和单行模式并不是反义词

  • 多行模式:^$分别匹配任意一行的行首和行尾
  • 单行模式:.也匹配换行符\n

体会

  • 之前一直用{1,}来表示重复1次及以上,其实用+就可以
  • 要搞明白使用正则表达式的库的函数都是干什么用的,下篇就写这个吧

常用正则表达式

  • IP:(([1‐9]?\d|1\d{2}|2[0‐4]\d|25[0‐5]).){3}([1‐9]?\d|1\d{2}|2[0‐4]\d|25[0‐5])
  • IP:((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))
  • Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
  • 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
  • 手机号码:^(13[0-9]|14[0-9]|15[0-9]|166|17[0-9]|18[0-9]|19[8|9])\d{8}$
  • 强密码(包含大小写、数字,无特殊字符,长度8-10):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$(断言)
  • 日期格式:^\d{4}-\d{1,2}-\d{1,2}
  • 中文字符:[\u4e00-\u9fa5]
  • 空白行:\n\s*\r^\s*\n

还没搞明白的特殊匹配方法

平衡组/递归匹配

参考

https://www.jb51.net/tools/zhengze.html

相关文章

  • 关于正则表达式的一些感悟

    这两天又看了一下正则表达式的入门手册,有些原来没有注意到的东西,记录一下。 匹配类型 有些元字符只匹配位置 \b ...

  • 正则表达式基础

    学好正则表达式很重要,下面是一些关于正则表达式的基本知识整理 \ : 转义字符 ^ : 匹配字符串开始位置 $...

  • 记录常用的正则表达式

    旨在记录平常项目中用到的一些正则表达式,偶尔回来看下~ 关于正则表达式可以看 MDN[https://develo...

  • 正则表达式

    正则表达式介绍: //正则表达式不是js中的独有功能//其他的一些语言中也有正则的实现方式,当我们在查看关于正则的...

  • JS基础-正则表达式

    有关于正则表达式的一些题目 1: \d,\w,\s,[a-zA-Z0-9],\b,.,*,+,?,x{3},^,$...

  • 关于灯灯的教育感悟

    最近写的关于教育的一些零散的感悟。

  • 正则表达式

    正则表达式概述 什么是正则表达式     正则表达式:(Regular Expression),是一些有特殊的字符...

  • 关于孝道的一些感悟

    上周我们诗经学习组学了《凯风》,这是一首讲母爱的诗,老师(老妈)着重讲了父母与子女关系的问题,通过这个点重新诠释了...

  • 关于写作的一些小感悟

    这些日子写得很少,公众号更新得很慢,原因有很多。 16年底刚开始写公众号的时候,无知无畏,当时也是心有猛虎的,想着...

  • 关于装修的一些感悟

    关于装修,每个人都会有不同的看法,这源于各自生活经历、阅历和经验的差异,且不管前期装修规划如何,总会有遗憾。今天的...

网友评论

      本文标题:关于正则表达式的一些感悟

      本文链接:https://www.haomeiwen.com/subject/nwlaeftx.html