找回密码
 注册
查看: 2552|回复: 0

perl语言正则表达式中简单的量词

[复制链接]
发表于 2011-11-14 20:31:53 | 显示全部楼层 |阅读模式
通常,需要模式中某些串是可以重复的。星号(*)表示匹配前一项0次或者多次。因此,/fred\t*barney/将匹配上fred 和barney
之间有任意个制表位(tab)的字符串。它可以匹配“fred\tbarney”,其间有一个tab;匹配“fred\t\tbarney”,其间有两个制表位;
“fred\t\t\tbarney”其间有三个制表位;“fredbarney”,其间什么也没有。这是由于星号(*)是指“0 个或者多个”,因此其间可以
是任意个制表符,但不能是其它的字符。可以这样看待星号(*):“前面的东西,重复任意次数,包括0 次”(因为*号在数
学上是乘法运算符)。
如果希望包括不同的字符,怎么办呢?点(.)可以匹配任何单字符◆,因此.*将匹配任意字符任意多数。这就是说模式
/fred.*barney/将匹配fred,和barney 之间有任意多个任意字符(不含换行符)的字符串。任意行如果前面有fred,后面有barney,
其间为任意字符(字符串)都将匹配上。我们将.*叫做“任意字符串匹配模式”,因为任意的字符串均能被匹配上(不包括
换行符)。
◆除了换行符。以后我们将不再提醒你,因为你已经知道了。许多时候你不用担心这个问题,因为通常你的字符串中并不含有换行符。但
不应该把这个细节忘掉,因为说不定某人就在你的字符串中加入了换行符,因此应当记住点(.)不会匹配换行符。
星号的正是叫法是数量词(quantifier),意指其可以指代多个前面的项。它不是唯一的数量词,加(+)也是。加(+)的意思是可
以匹配前面一项的一个或多个:/fred +barney/意思是fred 和barney 之间由空格分开,且只能是空格。(空格不是元字符)。
它不会匹配fredbarney,因为加(+)意指一个或多个,因此至少是一个。可以这样看待加(+):“最后一项,(可选的)至少还
有一项。”
还有第三个数量词,其限制性更强。它是问号(?),其含义是前面一个项出现一次,或者不出现。也就是说,前面这个项出
现1 次或者0 次,此外不会有其它情况。因此,/barm-?bamm/只匹配:bamm-bamm 或bammbamm。这很容易记住:“前面
的这个项,出现?或者不出现?”
这三个数量词必须紧跟在某些项的后面,因为它是指前面项重复的次数。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|小黑屋|生物统计家园 网站价格

GMT+8, 2024-11-24 18:25 , Processed in 0.023906 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表