DANFA

PHP: Функция preg_replace_callback()

PHP предоставляет множество инструментов для работы с регулярными выражениями, и одним из наиболее мощных методов является функция preg_replace_callback(). Она позволяет производить замену частей строки, используя динамически генерируемые замены с помощью колбэк-функции. Рассмотрим подробно, как работает данная функция и какие возможности она открывает для разработчиков.

Описание функции
Функция preg_replace_callback() принимает строку или массив строк и ищет совпадения с указанным шаблоном регулярного выражения. Каждое найденное совпадение передается в специальную колбэк-функцию, которая возвращает новое значение для замены.

Формат вызова:
mixed preg_replace_callback(mixed $pattern, callable $callback, mixed $subject[, int $limit = -1])

  • $pattern: Регулярное выражение для поиска совпадений.
  • $callback: Колбэк-функция, принимающая совпадающие фрагменты и возвращающая новую строку-замену.
  • $subject: Исходная строка или массив строк, в которой производится замена.
  • $limit: Максимальное количество замен (по умолчанию неограниченно).

Возвращаемое значение:
Функция возвращает преобразованную строку или массив строк. Если ничего не найдено, возвращается исходная строка.

Примеры использования



Простой пример
Предположим, мы хотим заменить числа в строке, увеличив каждое число на единицу:
$string = "У меня есть 3 яблока и 5 апельсинов.";
$result = preg_replace_callback('/\d+/', function ($matches) {
    return $matches[0] + 1;
}, $string);

echo $result; // Выведет: У меня есть 4 яблока и 6 апельсинов.

Замена дат
Представьте ситуацию, когда необходимо изменить формат даты с dd-mm-yyyy на yyyy-mm-dd:
$string = "Сегодняшняя дата: 21-03-2023.";
$result = preg_replace_callback('/(\d{2})-(\d{2})-(\d{4})/', function ($matches) {
    return "$matches[3]-$matches[2]-$matches[1]";
}, $string);

echo $result; // Выведет: Сегодняшняя дата: 2023-03-21.

Перевод единиц измерения
Допустим, мы хотим перевести футы в сантиметры автоматически:
$string = "Высота здания составляет 100 футов.";
$result = preg_replace_callback('/(\d+)\s*fутов/i', function ($matches) {
    $feet = floatval($matches[1]);
    $cm = round($feet * 30.48); // Перевод футов в см
    return "$cm сантиметров";
}, $string);

echo $result; // Выведет: Высота здания составляет 3048 сантиметров.

Практические советы


  • Всегда проверяйте правильность регулярных выражений, чтобы избежать нежелательных результатов.
  • Используйте анонимные функции или замыкания для компактности и удобства написания колбэков.
  • Избегайте рекурсивных операций внутри колбэк-функций, чтобы предотвратить бесконечные циклы.

Заключение
Функция preg_replace_callback() представляет собой мощнейший инструмент для динамической обработки строк с применением регулярных выражений. Используя её гибкость и универсальность, разработчики могут легко реализовывать разнообразные задачи преобразования данных. Регулярно практикуйтесь и изучайте лучшие практики, чтобы освоить этот важный аспект программирования на PHP.

Автор:  19.10.2025 04:04:18 pm