限定符提供了一种简单方法,用于指定在模式中允许特定字符或字符集自身重复出现的次数。有 3 个非显式限定符:
1. | *,描述“出现 0 或多次”。 |
2. | +,描述“出现 1 或多次”。 |
3. | ?,描述“出现 0 或 1 次”。 |
限定符始终引用限定符前(左边)的模式,通常是单个字符,除非使用括号创建模式组。下面是一些模式示例及匹配的输入。
模式 | 输入(匹配) |
fo* | foo、foe、food、fooot、“forget it”、funny、 puffy |
fo+ | foo、foe、food、foot、“forget it” |
fo? | foo、foe、food、foot、“forget it”、funny、puffy |
除了指定给定模式准确出现 0 或 1 次之外,? 字符还可强制模式或子模式匹配数目最少的字符(如果匹配输入字符串中的多个字符)。
除了非显式限定符(一般叫做限定符,但为区别于下一组,故称非显式限定符)之外,还有显式限定符。在模式出现次数方面,限定符的概念非常模糊。使用显式限定符则可准确指定数字、范围或数字集。显式限定符位于所应用的模式的后边,这一点与正则限定符一样。显式限定符使用花括号 {} 及其中的数字值表示模式出现次数的上下限。例如,x{5} 将准确匹配 5 个 x 字符 (xxxxx)。如果仅指定一个数字,则表示次数上限;如果数字后跟一个逗号,如 x{5,},表示匹配任何出现次数大于 4 的 x 字符。下面是一些模式示例及匹配的输入。
模式 | 输入(匹配) |
ab{2}c | abbc、aaabbccc |
ab{,2}c | ac、abc、abbc、aabbcc |
ab{2,3}c | abbc、abbbc、aabbcc、aabbbcc |