Summary: in this tutorial, you’ll learn how to use quantifiers in regular expressions to match a number of instances of a character or a character class.
Introduction to regex quantifiers #
Quantifiers allow you to match their preceding elements a number of times. The following table shows the list of quantifiers:
| Quantifier | Meaning |
|---|---|
* | Match zero or more times. |
+ | Match one or more times. |
? | Match zero or one time. |
{ n } | Match exactly n times. |
{ n ,} | Match at least n times. |
{ n , m } | Match from n to m times. |
Match zero or more times (*) #
The * quantifier matches its preceding element zero or more times.
The following example uses the * quantifier to match text that ends with PHP:
<?php
$pattern = '/\w*PHP/';
$title = 'CakePHP & FuelPHP are PHP Frameworks';
if (preg_match_all($pattern, $title, $matches)) {
print_r($matches[0]);
}Code language: PHP (php)Output:
Array
(
[0] => CakePHP
[1] => FuelPHP
[2] => PHP
)Code language: PHP (php)Match one or more times (+) #
The + quantifier matches its preceding element one or more times. For example, the \d+ matches one or more digits.
The following example uses the + quantifier to match one or more digits in a string:
<?php
$pattern = '/\d+/';
$title = 'PHP 1.0 was released in 1995';
if (preg_match_all($pattern, $title, $matches)) {
print_r($matches[0]);
}Code language: PHP (php)Output:
Array
(
[0] => 1
[1] => 0
[2] => 1995
)Code language: PHP (php)Match zero or one time (?) #
The ? quantifier matches its preceding element zero or one time. For example:
<?php
$pattern = '/behaviou?r/';
$title = 'Which is correct behavior or behaviour?';
if (preg_match_all($pattern, $title, $matches)) {
print_r($matches[0]);
}Code language: PHP (php)Output:
Array
(
[0] => behavior
[1] => behaviour
)Code language: PHP (php)In this example, the u? matches zero or one character u. Therefore, the matches include both behavior and behaviour
Match Exactly n Times: {n} #
The {n} quantifier matches its preceding element exactly n time, where n is zero or a positive integer.
The following example uses the quantifier {n} to match a time string with the hh:mm format:
<?php
$pattern = '/\d{2}:\d{2}/';
$title = "It was 12:15 AM";
if (preg_match_all($pattern, $title, $matches)) {
print_r($matches[0]);
}Code language: PHP (php)Output:
Array
(
[0] => 12:15
)Code language: PHP (php)In this example, the \d{2} matches exactly two digits. Therefore, the \d{2}:\d{2} matches two digits, a colon :, and then two digits.
Match at least n times: {n,} #
The {n,} quantifier matches its preceding element at least n time, where n is zero or a positive integer.
The following example uses the {n, } quantifier to match the date strings with the m-d-yyyy or mm-dd-yyyy format:
<?php
$pattern = '/\d{1,}-\d{1,}-\d{4}/';
$title = "1-1-2020 or 01-01-2020 or 1/1/2020";
if (preg_match_all($pattern, $title, $matches)) {
print_r($matches[0]);
}Code language: PHP (php)Output:
Array
(
[0] => 1-1-2020
[1] => 01-01-2020
)Code language: PHP (php)Match Between n and m Times: {n,m} #
The {n,m} quantifier matches its preceding element at least n times, but no more than m times, where n and m are zero or a positive integer.
For example, the regular expression '/\d{1,}-\d{1,}-\d{1,}/' also matches 1000-1000-2020. To make it more accurate, you can use the {n, m} like this:
<?php
$pattern = '/\d{1,2}-\d{1,2}-\d{4}/';
$title = "1-1-2020 or 01-01-2020 or 1/1/2020";
if (preg_match_all($pattern, $title, $matches)) {
print_r($matches[0]);
}Code language: PHP (php)In this example, \d{1,2} matches one or two digits. Therefore, the \d{1,2}-\d{1,2}-\d{4} matches d-m-yyyy or dd-mm-yyyy.
Summary #
- Use the quantifier
*to match its preceding element zero or more times. - Use the quantifier
+to match its preceding element one or more times. - Use the quantifier
?to match its preceding element zero or more times. - Use the quantifier
{n}to match its preceding element exactlyntimes. - Use the quantifier
{n, }to match its preceding element at leastntimes. - Use the quantifier
{n, m}to match its preceding element fromntomtimes.