在前面章节简单的介绍过量词的使用,例如,使用大括号语法 {} 匹配特定的次数。
正则表达式量词自身是贪心的。贪心的量词会首先匹配整个字符串。尝试匹配时,它会选定尽可能多的内容,也就是整个输入。量词首次尝试匹配整个字符串,如果失败则回退一个字符后再次尝试。
这个过程叫做回溯(backtracking)。它会每次回退一个字符,直到找到匹配的内容或者没有字符可尝试为止。此外,它还记录所有的行为,因此相较另两种方式它对资源的消耗最大。
在您的正则表达式测试工具中输入如下文本:
1 22 333 4444 55555 666666 7777777 88888888 999999999 0000000000
首先,输入 “.*” 模式,它将会以贪心的方式匹配文本中的所有字符。如下图:
您再试试 “9*” 模式,如下图:
上图中,数字 9 的那一行就会被标亮了。现在再试一下:
上图中,依然会将数字 9 的那一行标亮。如果你选择了多行模式,数字9和0的行都会被标亮。因为你选择了多行模式,因此点号会匹配行之间的换行符;正常情况下,他不会匹配换行符。
如果要匹配一个或多个9,可以尝试 “9+” 模式。如下图:
如果要匹配零次或一次(可选),可以使用 “9?” 模式。如下图:
这只会匹配第一个出现的9。这个数字9是可选的,由于它存在于主体中,所以它会匹配并被标亮。如果使用 “99?” 模式。如下图:
则第一个9和第二个9都会匹配。下图列出了基本的量词以及它们的一些可能的作用。这些量词默认是贪心的,这意味它们在第一次尝试时会尽可能多地匹配字符。如下图:
使用花括号可以限制某个模式在某个范围内匹配的次数,未经修饰的量词就是贪心量词。例如:
9{1}
它会匹配第一个 9。更多关于花括号的用法请参考 “大括号{}语法” 章节。大括号语法如下: