正则表达式入门学习

正则表达式入门学习

参考文章
写在前面:正则表达式主要分为三大宏观规则和两大微观规则,通过进一步学习正则表达式,加深对于正则的理解,以便后面的学习

三大宏观规则

一、交集规则

​ 如果你有两个正则表达式E和F,那么EF也是一个正则,表示同时匹配E和F的内容

二、并集规则

​ 1、如果你有两个正则表达式EF,那么E|F也是一个正则,表示匹配E或者匹配F

​ 2、如果连接非常多的正则,那就得写非常多竖线,看起来也非常乱。所以还有一种简化记法[EFGH]。也就是[EFGH]跟写成E|F|G|H是等价的

三、补集规则

[EF]可以匹配那些匹配E或者匹配F的内空,在前加上一个^表示取反的意思,原来的逻辑或关系变成了逻辑与。所以[^EF]匹配那些不能匹配E而且不能匹配F的内容

两大微观规则

一、单字符规则

匹配的字符个数只有一个,根据字符的种类不同而规则不同

​ 1、正则提供的连字符,可以使用减号-表示连续出现的字符,只需写出头尾,可以把[0123456789]进一步简化成[0-9],把[abc...xyz]简化成[a-z]

​ 2、将一些常用的记法简化

​ 因为[0-9]很常用,大家又进一步简化成了\d(对应单词 digit)

​ 因为[a-zA-Z]也很常用,大家就把它简化成\a(对应单词 alpha)

​ 如果想匹配大小写字母、数字和下划线(也就是所有单词字符),可以写成[a-zA-Z0-9_]。也是因为太常用,大家将其简化为\w(对应单词 word)

​ 如果想匹配一些不可见的字符,可以写成[ \t\r\n\v\f],这个正则会匹配空格、水平制表符、回车、换行、 垂直制表符和 Page break 记,可以被简化为\s

​ 对应的不匹配这些字符换成大写字母即可

二、多字符规则

用大括号{}来实现

​ 1、匹配m到n次 {m, n}

​ 2、匹配至少出现一次, 即 {1,}简化成 +号

​ 3、匹配成多次或者不出现, 即{0, }简化成 * 号

​ 4、匹配出现零次或者一次,即{0, 1}简化成 ?号

拓展内容

贪心与非贪心

​ 正则表达式默认使用贪心模式,一次性匹配尽可能长的内容,通过添加?在*后面将模式设为非贪心模式

引用

​ 正则引擎会为每个括号分配一个编号(从1开始记数),并记录括号的内容,大家可以使用\+数字的方式来引用。

​ 通过例子说明:给定一段 html <h1>this is a title</h1><h1>this is content</h2>。这里第二个<h1>没有闭合,结束标签写成了h2。如果只想匹配正常结束的h1,那可以写成<(h1)>.*</\1>

环视

这个内容很抽象,需要好好领会,直接复制过来,用做记录

​ 比如我们有字符串foobarbarfoo。下面我将用大写字母表示想要匹配的内容。为了跟英语原文对应,我们规定当前字符右边为前(未处理),左边为后(已处理)。

如果只想匹配第一个出现的bar,也就是fooBARbarfoo。肯定不能只写成bar,因为第二个bar也会匹配到。我们希望正则引擎在每碰到一个bar的时候继续向前(右)看看还有没有bar,如果还有则说明不是第一个。所以,需要写成bar(?=bar)。 括号里以?开头,=表示检查是否出现, 因为是继续向前(右)看,所以叫做前向肯定环视(Look ahead positive)。

如果想匹配第二个bar也就是foobarBARfoo,则需要写成bar(?!bar)。也就是说查到bar只后还要继续向前(右)看,没有bar才算匹配到。因为是没有,所以叫前向否定环视(Look ahead negative)。

第一个,可以匹配单词的边界。这个两个合起来 (?<=\W)(?=\w)|(?<=\w)(?=\W),就可以匹配单词的左右边界,可以简化成\b

第二个,可以匹配一行的开始和结束。一行的开始,顾名思义,就是第一个字符之前的位置,在它之前没有字符,在它之后是任意字符,即(?<!.)(?=.)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值