返回介绍

7.5 占有量词

发布于 2024-01-20 21:40:46 字数 1183 浏览 0 评论 0 收藏 0

占有式匹配很像贪心式匹配,它会选定尽可能多的内容。但与贪心式匹配不同的是它不进行回溯。它不会放弃所找到的内容,它很自私,这也是把它称为占有式(possessive)的原因。它紧紧“抱”住自己所选的内容,一点也不放弃。但占有量词的优点是速度快,因为无需回溯。当然,匹配失败的话也很快。

说实话,用本书中的例子你很难看出贪心式、懒惰式以及占有式量词的区别。但随着经验的增长,以及对性能的看重,你会发觉其中的不同。

为了理解这一点,我们先尝试匹配以零开头的多个零,然后再匹配以零结尾的多个零。在Reggy中,先确定勾选Match All,然后输入以下以零开头的表达式:

0.*+

发生什么了?所有的零都被标亮了。存在一个匹配。占有式的匹配看起来和贪心式的匹配是一样的,但没有回溯。可以证明一下。输入这个带有结尾零的表达式:

.*+0

没有匹配——原因就是没有回溯。它一下就选定了所有的输入,不再回过来查看。它“挥霍”了自己的财产。它一下子没在结尾找到零,也不知道该从哪里找起。如果将加号去掉,它会找到所有的0,因为它变回贪心式匹配了。

.*0

当你知道文本中的内容时,就知道在哪里可以找到匹配,这时你应该会使用占有量词。你不在乎它是否会选定所有内容。占有式匹配有助于提高匹配的性能。表7-4列出了占有量词。

表7-4 占有量词

语法

描述

?+

占有式匹配零次或一次(可选)

++

占有式匹配一次或多次

*+

占有式匹配零次或多次

{n }+

占有式匹配n

{n ,}+

占有式匹配n 次或更多次

{m,n }+

占有式匹配mn

下一章将会介绍环视。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文