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