Regex Quantifiers

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:

QuantifierMeaning
*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 exactly n times.
  • Use the quantifier {n, } to match its preceding element at least n times.
  • Use the quantifier {n, m} to match its preceding element from n to m times.
Did you find this tutorial useful?