正则表达式 捕获分组的理解

根据百度百科, 捕获分组,非捕获分组共6种

分组的概念: 一对括号内的表达式匹配到的值, 就是一个分组

举例文本: 111_A3Z_000

(pattern) 后续分组可以拿到 pattern匹配的值
    举例: (A\d)Z
        分组$0 是当前整个表达式匹配到的值A3Z
        分组$1 的值就是A3
        分组可以调整顺序, 组合别的字符 达到不少特别的效果, 比如 大小写转换 \U$1 \L$1

(?:pattern) 分组不能拿到pattern匹配的值(不存储结果)

举例文本:  Windows2000  Windows3.1 Windows10
(?=pattern) 更适合匹配表达式前面的, 分组不能拿到pattern的值, 表达式匹配不包含pattern
    举例: Windows(?=2000), 匹配Windows, 后面是2000的
        匹配的结果是由 正向肯定+pattern组合而成
    举例: 13_a3  \d(?=3),  意思是 "数字+3"
          如果待替换的值为0, 那么结果是  03_a3
           "数字"部分是命中的且参与替换,  (?=3) 也被命中但没有参与替换
        为什么推荐进行正向匹配?
        因为pattern不占用指针位置,(?=pattern)后面的值 就必须是 在pattern的基础上进行增加

        那能不能在表达式后面 添加pattern?  当然可以
        举例: 131_13A_A3A_121 (?=3)\d\d  从有3的前面开始匹配, 最终只有131能命中 31
        也就是说   (?=3)\d\d  红色部分的pattern语意是要一致的

(?!pattern) 更适合匹配表达式前面的, 语义同上相反
    举例: Windows(?![95|98|NT|2000]), 匹配Windows 但后面不是 95|98|NT|2000 的


举例文本:  2000Windows  3.1Windows 10Windows
(?<=pattern) 更适合匹配表达式后面的, 分组不能拿到pattern的值, 表达式匹配不包含pattern
    举例: (?<=[95|98|NT|2000])Windows, 匹配2000后面的Windows
     参考正向肯定
(?<!pattern) 更适合匹配表达式后面的, 语义同上相反
    举例: (?<![95|98|NT|2000])Windows, 匹配非2000后面的Windows


以?开头的, 分组不能拿到pattern的值
=是匹配pattern
!是不匹配pattern
表达式中包含<的, 更适合匹配表达式后面的

正则表达式语法 - 黑白之间 - 博客园

正则表达式-- (?:pattern)与(?=pattern)的区别 - 銀色飞行船 - 博客园

=======================================================

排除某个单词, 的任意一行

^((?!hello).)*$

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值