Many patterns include atoms that repeat multiple times. For example, to match a string with 6 letters one might define the pattern:
\w\w\w\w\w\w
which is both cumbersome, and limits the pattern to only a specific number of characters. What if we wanted to match words with 6 or 7 letters?
This is resolved using quantifiers, which specify how atoms repeat in a pattern. Using quantifiers we could express the previous pattern as:
\w\{6}
which specifies that the "\w" atom is to be repeated 6 times.
Greedy vs Non-greedy
Greedy matching is the default behavior of regular expressions, where the regular expression engine will try to match as much text as possible. In contrast, non-greedy matching, also known as lazy matching, tries to match as little text as possible.
Specifier | From | To | Greedy |
---|---|---|---|
* | 0 | Yes | |
+ | 1 | Yes | |
? | 0 | 1 | Yes |
= | 0 | 1 | Yes |
{} | 0 | Yes | |
{n,m} | n | m | Yes |
{n} | n | ||
{n,} | n | Yes | |
{,m} | 0 | m | Yes |
{-n,m} | n | m | No |
{-n} | n | ||
{-n,} | n | No | |
{-,m} | 0 | m | No |
{-} | 0 | No |
? is the standard "0 or 1", but cannot be used in Vim reverse searches. For this reason, Vim additionally defines = as equivalent to ?.