正则表达式的一些技巧

两种形式的if then else
形如
(?(?=regex)then|else) ,如果前向断言匹配成功则必须匹配then部分,否则匹配else部分。四种断言形式都可以使用。

(?(?=regex)then|else) 正向先行断言的形式。
//echo "abcdefg" |perl -pe 's#(?(?=h)b|e)#_#g'
该表达式比较白话的说,就是如果一个字符后面是regex,那么匹配后面是then的,否则匹配后面是else的,这就导致这种形式意义不大,该位置后面为regex的时候,then如果=regex才匹配,否则匹配else。

(?(?!regex) then|else) 负向先行断言的形式
这个该表达式和上面类似,意义不大。

(?(?<=regex)then|else) 正向后行断言的形式
该表达式,如果前面是regex的话,匹配后面的then,否则匹配else

(?(?<=re)g|t) //string regrettable
匹配re后面的g,但是不匹配re后面的t,但是匹配不是re后面的t
(?(?&lt;!regex) then|else)负向后行断言的形式
形如(?(1)then|else)的if then else
如果获得第一个分组成功,则(1)then,否则(1)else
//echo "repeat rescure" |perl -pe 's#(re){0,2}(?(1)p|c)#_#'

前后断言
向前看去
是 5: (?=5)
不是5: (?!5)

向后看去
是 5: (?<=5)
不是5: (?<!5)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值