Skip to main content

PHP Regular Expressions

By SamK
0
0 recommends
Category(s)
Topic(s)

A regular expression is a sequence of characters that defines a search pattern. You can use this search pattern to identify specific data within a text.

A regular expression can be as simple as a single character or as complex as a detailed pattern.

Regular expressions are useful for various text search and text replacement operations.

Syntax

In PHP, regular expressions are strings consisting of delimiters, a pattern, and optional modifiers.

<?php
$exp = "/WebmasterMaze/i";
?>

In the example above, / is the delimiter, WebmasterMaze is the pattern being searched for, and i is a modifier that makes the search case-insensitive.

The delimiter can be any character that is not a letter, number, backslash, or space. The most common delimiter is the forward slash (/), but if your pattern contains forward slashes, it is convenient to choose other delimiters such as # or ~.

Regular Expression Functions

PHP provides a variety of functions for using regular expressions.

The most common functions are:

  • preg_match() - Returns 1 if the pattern was found in the string and 0 if not
  • preg_match_all() - Returns the number of times the pattern was found in the string, which may also be 0
  • preg_replace() - Returns a new string where matched patterns have been replaced with another string

preg_match()

The preg_match() function determines whether a string contains matches for a pattern.

For example, you can use a regular expression to perform a case-insensitive search for "WebmasterMaze" in a string:

<?php
$str = "I love WebmasterMaze";
$pattern = "/webmastermaze/i";
echo preg_match($pattern, $str);
?>

/*
Output:
1 (Means match found)
*/

preg_match_all()

The preg_match_all() function indicates how many matches were found for a pattern in a string.

For example, you can use a regular expression to perform a case-insensitive count of the number of occurrences of "run" in a string:

<?php
$str = "She decided to run, run, and run until she reached the finish line.";
$pattern = "/run/i";
echo preg_match_all($pattern, $str);
?>

/*
Output:
3
*/

preg_replace()

The preg_replace() function replaces all matches of a pattern in a string with another string.

For example, you can use a case-insensitive regular expression to replace "sunset" with "dusk" in a string.

<?php
$str = "He watched the sunset as the sunset painted the sky with colors.";
$pattern = "/sunset/i";
echo preg_replace($pattern, "dusk", $str);
?>

/*
Output:
He watched the dusk as the dusk painted the sky with colors.
*/

Regular Expression Modifiers

Modifiers can alter how a search is conducted.

  • i - Performs a case-insensitive search
  • m - Performs a multi-line search, which means that the search for a match is conducted per line, instead of the whole string.
  • u - Enables correct matching of UTF-8 encoded patterns

Regular Expression Patterns

Brackets

Brackets are used to specify a range of characters to search for.

  • [abc] - Find one or many of the characters inside the brackets
  • [^abc] - Find any character NOT between the brackets
  • [a-z] - Find any character alphabetically between two letters
  • [A-z] - Find any character alphabetically between a specified upper-case letter and a specified lower-case letter
  • [A-Z] - Find any character alphabetically between two upper-case letters.
  • [123] - Find one or many of the digits inside the brackets
  • [0-5] - Find any digits between the two numbers
  • [0-9] - Find any digits

Metacharacters

Metacharacters are characters that have a special meaning.

  • | - Find a match for any one of the patterns separated by | as in: cat|dog|fish
  • . - Find any character
  • ^ - Finds a match as the beginning of a string as in: ^Hello
  • $ - Finds a match at the end of the string as in: World$
  • \d - Find any digits
  • \D - Find any non-digits
  • \s - Find any whitespace character
  • \S - ind any non-whitespace character
  • \w - Find any alphabetical letter (a to Z) and digit (0 to 9)
  • \W - Find any non-alphabetical and non-digit character
  • \b - Find a match at the beginning of a word like this: \bWORD, or at the end of a word like this: WORD\b
  • \uxxxx - Find the Unicode character specified by the hexadecimal number xxxx

Quantifiers

Quantifiers specify the quantities of characters or patterns.

  • n+ - Matches any string that contains at least one n
  • n* - Matches any string that contains zero or more occurrences of n
  • n? - Matches any string that contains zero or one occurrences of n
  • n{3} - Matches any string that contains a sequence of 3 n's
  • n{2, 5} - Matches any string that contains a sequence of at least 2, but not more that 5 n's
  • n{3,} - Matches any string that contains a sequence of at least 3 n's

Note: If your expression needs to search for one of the special characters, you can use a backslash (\) to escape them. 

For example, to search for one or more question marks, you can use the following expression: $pattern = '/\?+/';

Grouping

Parentheses () can be used to group parts of a pattern and apply quantifiers to the entire group. Additionally, they allow you to capture portions of the pattern for later use as a match.

Use grouping to search for the word "oranges" by looking for "or" followed by one occurrence of "an".

<?php
$str = "Apples and oranges.";
$pattern = "/or(?:an){1}/i";

// Check if the pattern matches the string and output the result
if (preg_match($pattern, $str)) {
    echo "Match found.";
} else {
    echo "No match found.";
}
?>

/*
Output:
Match found.
*/

Questions & Answers