7.2 用*、+和?进行匹配

如果你在Reggy中输入了前面的数字,现在就可以开始测试了。首先使用Kleene星号,这一命名是为了纪念正则表达式的发明人Stephen Kleene。如果像下面这样在点号之后使用星号:

  1. .*

它将会以贪心的方式匹配主文本中的所有字符(数字)。如前所述,.*匹配任何字符零次或多次。下方文本框中的所有数字都会以另一种颜色高亮显示。一本早期手册对Kleene星号的描述如下:

正则表达式后跟一个“*”(Kleene星号)表示该正则表达式所匹配的文本接连出现任意次(包括零次)。

现在试一下:

  1. 9*

底部数字9的那一行就会被标亮。现在再试一下:

  1. 9.*

这就会将包含数字9的行和下面的包含数字0的行标亮。因为勾选了Multiline选项(在应用程序窗口底部),点号会匹配行之间的换行符;正常情况下,它不会匹配换行符。

要匹配一个或多个9,尝试:

  1. 9+

跟前面有什么不同呢?暂时看不出来,因为在主文本中有九个9。主要的区别是+会寻找至少一个9,而*会寻找零个或多个9。

要匹配零次或一次(可选),可使用:

  1. 9?

这只会匹配第一次出现的9。这个数字9是可选的,由于它存在于主文本中,所以它会匹配并被标亮。如果用下面这个表达式:

  1. 99?

则第一个9和第二个9都会匹配。

表7-1列出了基本的量词以及它们的一些可能的作用。这些量词默认是贪心的,这意味它们在第一次尝试时会尽可能多地匹配字符。

表7-1 基本量词

语法描述
? 零个或一个(可选)
+ 一个或多个
* 零个或多个