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?