Способы удаления подстрок и символов в 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; // 'Начало конец'
Результат: 'Начало конец'