Quantifiers
suggest changeQuantifiers allows to specify count of repeated strings.
- Zero or one:
/a?/
- Zero or many:
/a*/
- One or many:
/a+/
- Exact number:
/a{2,4}/ # Two, three or four
/a{2,}/ # Two or more
/a{,4}/ # Less than four (including zero)
By default, quantifiers are greedy, which means they take as many characters as they can while still making a match. Normally this is not noticeable:
/(?<site>.*) Stack Exchange/ =~ 'Motor Vehicle Maintenance & Repair Stack Exchange'
The named capture group site
will be set to ’‘Motor Vehicle Maintenance & Repair’ as expected. But if ‘Stack Exchange’ is an optional part of the string (because it could be ‘Stack Overflow’ instead), the naive solution will not work as expected:
/(?<site>.*)( Stack Exchange)?/
This version will still match, but the named capture will include ‘Stack Exchange’ since \*
greedily eats those characters. The solution is to add another question mark to make the \*
lazy:
/(?<site>.*?)( Stack Exchange)?/
Appending ?
to any quantifier will make it lazy.
Found a mistake? Have a question or improvement idea?
Let me know.
Table Of Contents