正则表达式4种预查的作用

正则表达式4种预查的作用

(?=pattern) (?!pattern) (?<=pattern) (?<!pattern)

刚开始学习正则表达式的时候看着最蒙逼的4个表达式, 小括号中带着问号, 一脸蒙逼不知道是写的啥, 也没整明白效果是啥. 后来终于在不断的看文档和尝试, 总算是搞明白了


预查表达式

预查表达式主要功能是起到 判断作用 , 类似于编程中的 if 判断语句, 判断当前匹配字符的左右内容是什么, 并且符合预查表达式内容的内容 不会被获取 .

在我们要匹配一些字符串的时候, 通常有些内容我们不需要匹配获取, 但是可以作为参考, 这个时候就可以使用预查表达式了. 例: 获取所有 括号之间的内容不包含括号 , 所有 双引号之间的内容 等.


方向

预查表达式可以看到有两个方向, 正向 和 反向. 通俗来说就是 当前字符判断位置 的 右边 和 左边.
4种表达式中 < 用来描述向左(反向), 没有 < 表示向右(正向)
当然这种写法也是固定的, 比如你写个(?<<=)就报错了.


肯定 和 否定

肯定用 = 号描述, 否定用 ! 号描述
这两种含义最简单的理解就是 是 和 不是

  • bcd(?=123) 表示 获取 bcd 字符串并且该字符串右边一定是 123 字符串.
    能匹配到bcd123
  • bcd(?!123) 表示 获取 bcd 字符串, 并且该字符串右边一定不是 123
    所以匹配到的内容一定不是bcd123, 可以是bcdasd, bcdbcd, bcd123… 反正bcd右边不是123的都行

各种刁钻的例子

  1. (?=abc)a 表示 获取 a 字符串, 并且从a字符串左边开始向右 为 abc
    等统于 a(?=bc), 因为是从a字符左边开始向右, 所以会包含a字符.
  2. (?<=123)abc 表示 获取字符串abc, 并且abc字符串的左边一定是123字符串
  3. abc(?<=123) 表示 获取字符串abc,并且从c字符右侧向左3个字符的字符串一定是123
    因为c字符右侧开始向左3个字符和abc重叠了, 所以这个是表达式匹配不到任何字符串.
  4. (?<=123)abc 表示 获取字符串abc, 并且从字符a左边开始向左3个字符一定是123.
    字符串123abc 满足条件匹配成功, 并获取到的字符串是abc

正常一点的例子

  1. (?<=\()((?!\(|\)).)*(?=\)) 获取所有小括号中的内容
    字符串 (aa)test(bb)test2(cc)test3(dd) 获得内容为4个字符串 aa bb cc dd
  2. (?<=")\w*(?=") 获取双引号之间的字符串
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值