《精通正则表达式》读书笔记

本文深入探讨了正则表达式的使用技巧,包括字符组、元字符、脱字符、括号的功能及其在不同场景下的应用。通过实例解析,帮助读者理解如何在复杂性和完整性之间寻找平衡,并提供优化引擎在匹配过程中的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1)一个字符串,即使是一个排除型字符组,也需要匹配一个字符,如:正则表达式 /e[^q]/ 是不能匹配 apple 这个单词的(在e后面并没有跟换行符的前提下);

2)在字符组里,元字符的定义和意义是完全不一样的,尤其是连字符“-”,在字符组中,它往往用于匹配一个范围,除非它是紧跟在“[”后面的,这里它匹配的就是“-”本身,而不作为范围识别的用途。所以,要切记,在字符组中,如果“-”是作为普通字符而不是元字符进行匹配时,一定要将连字符放在最前面,当然,还有另外一种解决办法是转义,不过这样一来又会增加表达式的复杂度了。所以还是尽量放在前面啦;

关于这个问题的原文摘录:在字符组内部,元字符的定义规则(及它们的意义)是不一样的。例如,在字符组外部,点号是元字符,但是在内部则不是如此。相反,连字符只有在字符组内部(这是普遍情况)才是元字符,否则就不是。脱字符在字符组外部表示一个意思,在字符组内部紧接着“[”时表示另外一个意思,其他情况下又表示别的意思。

3)脱字符“^”在字符组中,则表示不匹配它自己后面紧跟的字符,如果在字符组外,则是从开头处开始匹配的意思;

4)表示重复的元字符“?”、“*”、“+”的异同:

表示重复的元字符“?”、“*”、“+”的异同
次数下限次数上限说明
01可以不出现,如果出现最多只能出现一次
*0可以出现任意多次
+1至少出现一次,上不封顶

5)如果想要在复杂性与完整性之间寻求一个平衡,一个重要的因素是了解清楚待匹配的对象;

6)正则表达式中括号的三种功能:

6.1)限定多选结构的范围; 如:ab(c|d|e)fgh,注意上述写法与去掉括号时 abc|d|efgh 的区别

6.2)标注量词作用的元素;如:ab(cde)+fgh,注意上述写法与去掉括号时 abcde+fhg的区别

6.3)为引用捕获文本;作为这个用法加括号是为了返回或引用匹配结果

7)非捕获型括号:(?:)

8)如果多选分支是有序的,而且能够匹配同样文本的分支不只一个,那就必须要特别注意多个分支的排列次序

9)优化引擎从来不会在字符串开头以外的地方尝试带^锚点的表达式,因为这样可能会严重影响匹配的效率


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值