【正则表达式】前瞻,后顾,负前瞻,负后顾

举个例子:

有个字符串

str = "博客园 顾客 博客 客园"

我们想匹配字符串里"博客园"的"客"字而不要其他的"客"字,这时就需要用到前瞻后顾。

正则表达式如下:

(?<=博)客(?=园)

反过来,我们不想要"博客园"的"客"字,但是想要其他"客"字。这时就要用到负前瞻,负后顾

正则表达式如下:

(?<!博)客(?!园)

 

总结一下:

前瞻: exp1(?=exp2)     查找exp2前面的exp1

后顾:  (?<=exp2)exp1   查找exp2后面的exp1

负前瞻:  exp1(?=exp2)     查找后面不是exp2的exp1

负后顾:  (?<=exp2)exp1   查找前面不是exp2的exp1

 

可以发现,负前瞻、负后顾就是把前瞻、后顾中的"="改成了"!"

注意:后顾功能在大多数语言中有长度限制,只能使用定长的表达式,像\w+和\d 这样的表达式长度可变,不能用在后顾中

 

一个复杂一点的例子:

str = "data: '|12 34 56 78 90|', data: '|12|3456|7890|', data: '|12|', data: '1234567890', data: '|1234|'  "

我们要匹配data后面有||的部分,要求里面没有空格没有|并且长度大于2

(?<=data: ')\|[^ \|]{2,}?\|(?=')

可以匹配到 |1234|

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值