Способы удаления подстрок и символов в PHP

Раздел: Программирование на PHP -> Строки

Методы удаления части строки в PHP

Как удалить заданную подстроку из строки?

Наиболее эффективный способ для удаления всех вхождений фиксированной подстроки – использование функции str_replace. Она заменяет все вхождения искомой строки на пустую строку.


$text = 'Привет, мир! Мир прекрасен.';
$result = str_replace('мир', '', $text);
echo $result; // 'Привет, !  прекрасен.'
  

Php string function (строковые функции в php)

Функция чувствительна к регистру. Для регистронезависимого удаления применяется str_ireplace.

Типичная ошибка: если подстрока содержит специальные символы регулярных выражений, str_replace работает корректно, так как не использует regex. Проблемы могут возникнуть с многобайтовыми кодировками – функция считает каждый байт отдельным символом. Для UTF‑8 используйте mb_str_replace (пользовательская функция) или mb_ereg_replace.

Как удалить символ на определённой позиции?

Если требуется удалить один символ по индексу, подойдёт комбинация substr и конкатенации.


$str = 'PHP';
$pos = 1; // удаляем 'H'
$result = substr($str, 0, $pos) . substr($str, $pos + 1);
echo $result; // 'PP'
  

удалить строку php (удаление строки в php)

Для многобайтовых строк применяются mb_substr.

Ошибка: при указании позиции за пределами строки substr вернёт пустую строку или false. Всегда проверяйте длину строки функцией strlen или mb_strlen.

Как удалить подстроку по регулярному выражению?

Когда шаблон удаления сложнее фиксированной строки, используется preg_replace. Он заменяет все вхождения, соответствующие регулярному выражению.


$text = 'Телефон: +7 (123) 456-78-90';
$result = preg_replace('/\D/', '', $text); // удаляем все нецифровые символы
echo $result; // '71234567890'
  

Для работы с UTF‑8 используйте модификатор u.

Проблема: неправильный regex может привести к удалению не той части или к ошибке. Всегда экранируйте специальные символы с помощью preg_quote, если подстрока содержит их.

Как заменить часть строки на пустую, зная начальную позицию и длину?

Функция substr_replace заменяет фрагмент строки на заданное значение. Передав пустую строку, можно удалить участок.


$str = 'abcdef';
$result = substr_replace($str, '', 1, 3); // удаляем с позиции 1 длиной 3
echo $result; // 'aef'
  

Длина может быть отрицательной – это означает, сколько символов оставить до конца строки.

Типичная ошибка: путаница с начальной позицией: в некоторых языках нумерация начинается с 1, в PHP – с 0. Также возможна путаница с порядком аргументов.

Как удалить строку из многострочного текста?

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


$text = "строка1\nстрока2\nстрока3";
$lines = explode("\n", $text);
$remove = 'строка2';
$filtered = array_filter($lines, function($line) use ($remove) {
    return $line !== $remove;
});
$result = implode("\n", $filtered);
echo $result; // "строка1\nстрока3"
  

Для удаления по частичному совпадению используйте strpos или preg_match.

Проблема: array_filter сохраняет ключи, что может привести к неожиданностям при дальнейшей обработке. Для переиндексации используйте array_values.

Как удалить указанное количество символов с начала или конца строки?

Для удаления первых N символов применяется substr с началом на N. Для удаления последних N символов – substr с отрицательным вторым аргументом.


$str = '12345';
$withoutFirst2 = substr($str, 2); // '345'
$withoutLast2 = substr($str, 0, -2); // '123'
  

Такие операции часто используются при обработке идентификаторов или форматировании чисел.

Ошибка: если количество удаляемых символов больше длины строки, substr вернёт пустую строку (для начала) или false (для конца при PHP 7). Проверяйте длину.

Расширенные примеры удаления строки в PHP

Удаление нескольких разных подстрок

Используйте str_replace с массивами для удаления сразу нескольких значений.

Пример

$text = 'PHP и JavaScript и HTML';
$remove = ['PHP', 'JavaScript', 'HTML'];
$result = str_replace($remove, '', $text);
echo $result; // ' и  и '
  
Результат: ' и  и '

Удаление последнего вхождения подстроки

Функция strrpos находит последнее вхождение, затем substr_replace удаляет его.

Пример

$str = 'Раз, два, три, два';
$needle = 'два';
$pos = strrpos($str, $needle);
if ($pos !== false) {
    $result = substr_replace($str, '', $pos, strlen($needle));
}
echo $result; // 'Раз, два, три, '
  
Результат: 'Раз, два, три, '

Удаление строк по номеру в многострочном тексте

Разбиваем по строкам, удаляем элемент по индексу, объединяем.

Пример

$text = "Первая\nВторая\nТретья";
$lines = explode("\n", $text);
$lineToDelete = 1; // удаляем вторую строку
if (isset($lines[$lineToDelete])) {
    unset($lines[$lineToDelete]);
}
$result = implode("\n", $lines);
echo $result;
  
Первая
Третья

Удаление всех символов, кроме определённых (белый список)

С помощью preg_replace оставляем только разрешённые символы.

Пример

$input = 'Hello 123! @#$%';
$allowed = '/[^a-zA-Z0-9\s]/';
$result = preg_replace($allowed, '', $input);
echo $result; // 'Hello 123! '
  
Результат: 'Hello 123! '

Удаление пустых строк из текста

Используйте array_filter с проверкой длины.

Пример

$text = "строка1\n\nстрока2\n\n\nстрока3";
$lines = explode("\n", $text);
$filtered = array_filter($lines, function($line) {
    return trim($line) !== '';
});
$result = implode("\n", $filtered);
echo $result;
  
строка1
строка2
строка3

Удаление фрагмента между двумя маркерами

Используйте preg_replace для удаления блока, например, текста между {} скобками (включая сами скобки).

Пример

$str = 'Начало {удалить это} конец';
$result = preg_replace('/\{[^}]*\}/', '', $str);
echo $result; // 'Начало  конец'
  
Результат: 'Начало  конец'

Удаление строки в PHP - comments

En
удалить строку php (php)