• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2020-01-17 16:08 Aet 隐藏边栏 |   抢沙发  3 
文章评分 1 次,平均分 5.0

介绍

有些结构并不真正匹配文本,而是负责判断在某个位置左/右侧的文本是否符合要求,这种结构被称为断言。
常见的断言有3类:

  • 单词边界
  • 行起始/结束位置
  • 环视

单词边界

记为\b,它匹配的是”单词边界位置“,而不是字符。

字符串 \brow\b \brow row\b
tomorrow ok
brown
row ok ok ok
rowdy ok
说明 只能是单词row \b的右侧是单词字符,所以左侧不能是单词字符 \b的左侧是单词字符,所以右侧不能是单词字符

根据上示例表,可得出:

  • 单词边界并不区分左右
  • 单词字符要求“另一边不是单词字符”,而不是“另一边的字符不是单词字符”

行起始/结束位置

在正则表达式中,用来匹配位置的元素叫做锚点,它被用来定位到某个位置。
字符串的起始位置:^
不同平台下的行终止符

平台 行终止符
Unix/Linux \n
Windows \r \n
Mac OS \n

要匹配多行模式,在表达式前面加上(?m)
字符串的结尾位置:$

环视

在某个位置向左/右看,必须出现或不能出现某类字符。

解析:
上述正则表达式,(?!/)是一个环视结构,(?!...)是环视的标识,/才是真正的表达式,整个结构表达的含义是:当前位置之后(右侧),不允许出现/能匹配的文本

环视的分类

名字 记法 判断方向 匹配成功的返回值
肯定顺序环视 (?=...) 向右 True
否定顺序环视 (?!...) 向右 False
肯定逆序环视 (?<=...) 向左 True
否定逆序环视 (?<!...) 向左 False

环视的价值

  • 集中关注某个部分
  • 添加复杂的限制
  • 不干扰其他部分的匹配

环视的组合

环视匹配的并不是字符,而是位置。所以,在正则表达式匹配时,环视结构匹配成功,并不会更改“当前位置”,也就是说,多个环视可以组合在一起,实现在同一个位置的多重判断。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2021-11-21
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享