文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
7.5 占有量词
占有式匹配很像贪心式匹配,它会选定尽可能多的内容。但与贪心式匹配不同的是它不进行回溯。它不会放弃所找到的内容,它很自私,这也是把它称为占有式(possessive)的原因。它紧紧“抱”住自己所选的内容,一点也不放弃。但占有量词的优点是速度快,因为无需回溯。当然,匹配失败的话也很快。
说实话,用本书中的例子你很难看出贪心式、懒惰式以及占有式量词的区别。但随着经验的增长,以及对性能的看重,你会发觉其中的不同。
为了理解这一点,我们先尝试匹配以零开头的多个零,然后再匹配以零结尾的多个零。在Reggy中,先确定勾选Match All,然后输入以下以零开头的表达式:
0.*+
发生什么了?所有的零都被标亮了。存在一个匹配。占有式的匹配看起来和贪心式的匹配是一样的,但没有回溯。可以证明一下。输入这个带有结尾零的表达式:
.*+0
没有匹配——原因就是没有回溯。它一下就选定了所有的输入,不再回过来查看。它“挥霍”了自己的财产。它一下子没在结尾找到零,也不知道该从哪里找起。如果将加号去掉,它会找到所有的0,因为它变回贪心式匹配了。
.*0
当你知道文本中的内容时,就知道在哪里可以找到匹配,这时你应该会使用占有量词。你不在乎它是否会选定所有内容。占有式匹配有助于提高匹配的性能。表7-4列出了占有量词。
表7-4 占有量词
语法 | 描述 |
?+ | 占有式匹配零次或一次(可选) |
++ | 占有式匹配一次或多次 |
*+ | 占有式匹配零次或多次 |
{n }+ | 占有式匹配n 次 |
{n ,}+ | 占有式匹配n 次或更多次 |
{m,n }+ | 占有式匹配m至n 次 |
下一章将会介绍环视。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论