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

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


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值