正则表达式 lookaround

 

正则表达式

 

Lookaround

正则表达式中两个有用的结构: 向前查找 & 向后查找 (lookahead & lookbehind), 统称为 lookaround.

lookaround 去判断一个模式在字符串中是否存在, 不管匹配是否成功, 都不返回, 因此 lookaround 也称为断言(assertions).

lookaround 就像字符串的开始结束, 单词边界锚点(^ $ /b)一样, 是 "zero-width assertions".

 

Lookahead

 

Positive lookahead

my(?=here) 会匹配 myhere 成功,匹配其中的 my , (?=here) 用来判断 my 之后是否有 here ,有就匹配成功, 否则匹配失败; 匹配成功后 here 不返回;

my(?=here)$ 匹配 myhere 失败, 因为 (?=here) 只是判断 my 之后是否有 here, 他只是一种判定, 并不匹配, 因此 myehre 中 here

不能与 $ 匹配, 因此 my(?=here)$ 匹配 myhere 失败;

 

Negative lookahead

my(?!here) 若字符串中有 my, 且 my 后跟的不是 here, 则匹配成功

 

 

Lookbebind

 

Positive lookbehind

(?<=my)here 若字符串中有 here, 且之前是 my, 则匹配成功

 

Negative lookbind

(?<!my)here 若字符串中有 here, 且之前不是 my, 则匹配成功

 

JavaScript 中只有 lookahead, 没有 lookbehind

 

 

PHP 中有 lookahead 和 lookbehind

 

 

Lookaround 和 non-capturing group 的区别:

1, lookaround 是判断, 不匹配字符(不消耗字符);他只是判断字符是否存在, lookaround 之后的正则会当 lookaround 不存在接着匹配(匹配成功的情况)

2, non-capturing group 匹配, 但是不编号

 

non-capturing group 与 capturing group 的异同:

1, 两者都是分组

2, non-capturing group 分组不编号

3, capturing group 分组编号

4, non-capturing group 用在需要对一些字符组合构成一个分组(一个整体), 但是不需要从匹配结果中单独获取这个分组(non-capturing group 不编号); non-capturing group 性能会比 capturing group 好

 

 

 

正则表达式的效率:

1, Eliminated unnecessary use of capturing group.

2, Eliminated unnecessary use of alternation.

3, Eliminated inefficient use of lazy quantifier.

4, Implemented "unrolling-the-loop" efficiency technique.

5, A successful match is significantly faster.

6, Added non-capture group and beginning of string anchor.

7, A successful non-match is significantly faster.

8, Added non-capture group and word boundary anchor.

9, Linefeed added to regex to allow table to fit on screen.

10, Negligible performance improvement.

11, Reduced code size.

12, Added "i" ignore-case modifier.

13, The old and new regexes can match different text.

14, Removed unnecessary backslash escapes.

15, Removed unnecessary callback function.

16, Removed unnecessary local variables.

17, Added non-capture group and exposed literal starting text.

18, Literal RegExp object should be cached.

 

 

参考:

Lookaround

正则表达式的效率

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值