Регулярные выражения PHP (PCRE)

Регулярное выражение описывает шаблон сопоставления строк. Его можно использовать для проверки, содержит ли строка определённую подстроку, для замены совпавших подстрок или для извлечения из строки подстрок, соответствующих определённым условиям.

Для получения дополнительной информации о регулярных выражениях, пожалуйста, обратитесь к нашему:Регулярные выражения - Учебник。

В PHP регулярные выражения в основном используются через набор встроенных функций, наиболее часто используемые из которых:

  • preg_match(): Ищет соответствующий шаблон в строке и возвращает только первое совпадение.
  • preg_match_all(): Ищет соответствующий шаблон в строке и возвращает все совпадения.
  • preg_replace(): Ищет соответствующий шаблон в строке, а затем заменяет его.

Функция preg_match()

Функция preg_match() используется для поиска совпадающего шаблона в строке и возвращает только первое совпадение.

preg_match(pattern, subject, matches)

Описание параметра:

  • pattern: Шаблон регулярного выражения.
  • subject: Строка для поиска.
  • matches: Необязательный параметр, используемый для сохранения результата совпадения.

Пример

<?php
$str = "Hello, World!";
$pattern = "/Hello/";
if (preg_match($pattern, $str, $matches)) {
    echo "Match successful!" . PHP_EOL;
    print_r($matches);
} else {
    echo "No match found!";
}
?>

Вывод вышеприведённого кода:

匹配成功!
Array
(
    [0] => Hello
)

Функция preg_match_all()

Функция preg_match_all() используется для поиска совпадающего шаблона в строке и возвращает все совпадения.

preg_match_all(pattern, subject, matches)

Описание параметра:

  • Используется для поиска совпадающего шаблона в строке и возврата всех совпадений.
  • pattern: Шаблон регулярного выражения.
  • subject: Строка для поиска.
  • matches: Массив, используемый для хранения всех результатов совпадений.

Пример

<?php
$str = "The cat and the hat";
$pattern = "/[aeiou]/";
if (preg_match_all($pattern, $str, $matches)) {
    echo "Совпадающие гласные: " . implode(", ", $matches[0]);
} else {
    echo "No match found!";
}
?>

Вывод вышеприведённого кода:

匹配的元音字母: e, a, a, e, a

Функция preg_replace()

Функция preg_replace() используется для поиска совпадающего шаблона в строке с последующей его заменой.

preg_replace(pattern, replacement, subject)

Описание параметра:

  • pattern: Шаблон регулярного выражения.
  • replacement: Строка замены.
  • subject: Строка для поиска.

Пример

<?php
$str = "I love PHP";
$pattern = "/PHP/";
$replacement = "EXAMPLE";
$new_str = preg_replace($pattern, $replacement, $str);
echo "Строка после замены: " . $new_str;
?>

Вывод вышеприведённого кода:

替换后的字符串: I love EXAMPLE

Функции PCRE

В PHP мы можем использовать расширение PCRE для сопоставления строковых шаблонов.

ФункцияОписание
preg_filter Выполняет поиск и замену по регулярному выражению
preg_grep Возвращает элементы массива, соответствующие шаблону
preg_last_error Возвращает код ошибки, сгенерированный последним выполнением регулярного выражения PCRE
preg_match_all Выполняет глобальное сопоставление с регулярным выражением
preg_match Выполняет сопоставление с регулярным выражением
preg_quote Экранирует символы регулярного выражения
preg_replace_callback_array Выполняет поиск и замену по регулярному выражению с использованием callback-функции
preg_replace_callback Выполняет поиск и замену по регулярному выражению с использованием callback-функции
preg_replace Выполняет поиск и замену по регулярному выражению
preg_split Разбивает строку с помощью регулярного выражения

Константы PREG

Константа Описание С какой версии
PREG_PATTERN_ORDER Результаты упорядочены по "шаблону", используется только для preg_match_all(), т.е. $matches с
PREG_SET_ORDER Результаты упорядочены по "набору", используется только для preg_match_all(), т.е. $matches  
PREG_OFFSET_CAPTURE См.PREG_SPLIT_OFFSET_CAPTUREописание. 4.3.0
PREG_SPLIT_NO_EMPTY Этот флаг указывает preg_split() возвращать только непустые части.  
PREG_SPLIT_DELIM_CAPTURE Этот флаг указывает preg_split() также захватывать содержимое, совпавшее с выражениями в круглых скобках. 4.0.5
PREG_SPLIT_OFFSET_CAPTURE Если этот флаг установлен, также будет возвращено смещение каждого вхождения совпавшей подстроки. Обратите внимание, что это изменяет значения в возвращаемом массиве, где каждый элемент представляет собой массив, состоящий из совпавшей подстроки в качестве элемента 0 и её смещения относительно целевой строки в качестве элемента 1. Этот флаг можно использовать только с preg_split(). 4.3.0
PREG_NO_ERROR Возвращается preg_last_error(), когда нет ошибки. 5.2.0
PREG_INTERNAL_ERROR Возвращается preg_last_error() при внутренней ошибке PCRE. 5.2.0
PREG_BACKTRACK_LIMIT_ERROR Возвращается preg_last_error() при превышении лимита возвратов. 5.2.0
PREG_RECURSION_LIMIT_ERROR Возвращается preg_last_error() при превышении лимита рекурсии. 5.2.0
PREG_BAD_UTF8_ERROR Возвращается preg_last_error(), если последняя ошибка была вызвана некорректными данными UTF-8 (доступно только при работе с регулярными выражениями в режиме UTF-8). 5.2.0
PREG_BAD_UTF8_OFFSET_ERROR Возвращается preg_last_error(), если смещение не соответствует допустимому коду UTF-8 (доступно только при работе с регулярными выражениями в режиме UTF-8). 5.3.0
PCRE_VERSION Номер версии PCRE и дата выпуска (например, "7.0 18-Dec-2006"). 5.2.4
Другие расширения