preg_replace - Выполняет поиск и замену по регулярному выражению
Вернуться к: PCRE
preg_replace
(PHP 4, PHP 5, PHP 7)
preg_replace — Выполняет поиск и замену по регулярному выражению
Описание
$pattern
, mixed $replacement
, mixed $subject
[, int $limit
= -1
[, int &$count
]] )
Выполняет поиск совпадений в строке subject
с шаблоном
pattern
и заменяет их на
replacement
.
Список параметров
-
pattern
-
Искомый шаблон. Может быть как строкой, так и массивом строк.
Также доступны некоторые модификаторы PCRE, включая устаревший 'e' (PREG_REPLACE_EVAL), специфичный только для этой функции.
-
replacement
-
Строка или массив строк для замены. Если этот параметр является строкой, а
pattern
является массивом, все шаблоны будут заменены этой строкой. Если иpattern
иreplacement
являются массивами, каждый элементpattern
будет заменен соответствующим элементом изreplacement
. Если массивreplacement
содержит меньше элементов, чем массивpattern
, то все лишние шаблоны изpattern
будут заменены пустыми строками.replacement
может содержать ссылки вида \\n, либо (начиная с PHP 4.0.4) $n, причем последний вариант предпочтительней. Каждая такая ссылка будет заменена на подстроку, соответствующую n-ой подмаске. n может принимать значения от 0 до 99, причем ссылка \\0 (либо $0) соответствует вхождению всего шаблона. Подмаски нумеруются слева направо, начиная с единицы. Для использования обратного слеша, его необходимо продублировать (строка PHP "\\\\").При замене по шаблону с использованием ссылок на подмаски может возникнуть ситуация, когда непосредственно за маской следует цифра (например, установка цифры сразу после совпавшей маски). В таком случае нельзя использовать знакомую нотацию вида \\1 для ссылки на подмаски. Запись, например, \\11, смутит preg_replace(), так как она не сможет понять, хотите ли вы использовать ссылку \\1, за которой следует цифра 1 или же вы хотите просто использовать ссылку \\11, за которой ничего не следует. Это недоразумение можно устранить, если воспользоваться конструкцией \${1}1, использующей изолированную ссылку $1, и следующую за ней цифру 1.
При использовании устаревшего модификатора e эта функция экранирует некоторые символы (а именно ', ", \ и NULL) в строках, замещающих обратные ссылки. Это сделано для удостоверения корректности синтаксиса при использовании обратных ссылок внутри одинарных или двойных кавычек (например, 'strlen(\'$1\')+strlen("$2")'). Убедитесь, что вы владеете синтаксисом обработки строк PHP для того, чтобы точно осознавать, как будет выглядеть интерпретированная строка.
-
subject
-
Строка или массив строк для поиска и замены.
Если
subject
является массивом, то поиск с заменой осуществляется для каждого элемента массиваsubject
, а возвращаемое значение также будет являться массивом. -
limit
-
Максимально возможное количество замен каждого шаблона для каждой строки
subject
. По умолчанию равно -1 (без ограничений). -
count
-
Если указана, то эта переменная будет заполнена количеством произведенных замен.
Возвращаемые значения
preg_replace() возвращает массив, если
параметр subject
является массивом, иначе
возвращается строка.
Если найдены совпадения, возвращается новая версия subject
,
иначе subject
возвращается нетронутым, в
случае ошибки возвращается NULL
.
Ошибки
При использовании устаревшего модификатора "\e" бросается ошибка уровня E_DEPRECATED
.
Список изменений
Версия | Описание |
---|---|
5.5.0 | Модификатор /e теперь считается устаревшим. Используйте функцию preg_replace_callback(). Смотрите документацию PREG_REPLACE_EVAL с дополнительной информацией и описанием проблем с безопасностью. |
5.1.0 |
Добавлен параметр count
|
Примеры
Пример #1 Использование подмасок, за которыми следует цифра
<?php
$string = 'April 15, 2003';
$pattern = '/(\w+) (\d+), (\d+)/i';
$replacement = '${1}1,$3';
echo preg_replace($pattern, $replacement, $string);
?>
Результат выполнения данного примера:
April1,2003
Пример #2 Использование массивов с числовыми индексами в качестве аргументов функции preg_replace()
<?php
$string = 'The quick brown fox jumped over the lazy dog.';
$patterns = array();
$patterns[0] = '/quick/';
$patterns[1] = '/brown/';
$patterns[2] = '/fox/';
$replacements = array();
$replacements[2] = 'bear';
$replacements[1] = 'black';
$replacements[0] = 'slow';
echo preg_replace($patterns, $replacements, $string);
?>
Результат выполнения данного примера:
The bear black slow jumped over the lazy dog.
Отсортировав по ключам шаблоны и замены, получаем желаемый результат:
<?php
ksort($patterns);
ksort($replacements);
echo preg_replace($patterns, $replacements, $string);
?>
Результат выполнения данного примера:
The slow black bear jumped over the lazy dog.
Пример #3 Замена по нескольким шаблонам
<?php
$patterns = array ('/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/',
'/^\s*{(\w+)}\s*=/');
$replace = array ('\3/\4/\1\2', '$\1 =');
echo preg_replace($patterns, $replace, '{startDate} = 1999-5-27');
?>
Результат выполнения данного примера:
$startDate = 5/27/1999
Пример #4 Чистка пробелов
Этот пример вычищает лишние пробелы в строке.
<?php
$str = 'foo o';
$str = preg_replace('/\s\s+/', ' ', $str);
// Это теперь будет 'foo o'
echo $str;
?>
Пример #5 Использование параметра count
<?php
$count = 0;
echo preg_replace(array('/\d/', '/\s/'), '*', 'xp 4 to', -1 , $count);
echo $count; //3
?>
Результат выполнения данного примера:
xp***to 3
Примечания
Замечание:
При использовании массивов в
pattern
иreplacement
, ключи обрабатываются в том порядке, в котором они находятся в массиве. Этот порядок не всегда совпадает с числовым порядком индексов. Если вы используете индексы для сопоставления друг с другом нужногоpattern
иreplacement
, то вам необходимо прогнать через функцию ksort() оба массива перед использованием preg_replace().
Смотрите также
- "Регулярные выражения PCRE"
- preg_quote() - Экранирует символы в регулярных выражениях
- preg_filter() - Производит поиск и замену по регулярному выражению
- preg_match() - Выполняет проверку на соответствие регулярному выражению
- preg_replace_callback() - Выполняет поиск по регулярному выражению и замену с использованием callback-функции
- preg_split() - Разбивает строку по регулярному выражению
- preg_last_error() - Возвращает код ошибки выполнения последнего регулярного выражения PCRE
Вернуться к: PCRE