Регулярное выражение для удаления числа из строки

Подскажите.

Нужно из строки удалить определенное число. Например из строки

$str = '10 20 150 50 750 550 50';

удалить число 50, именно чтобы оно не затронуло 150, 750, 550.

пробую

preg_replace("/50[^\d]+/", NULL, $str );

но оно некорректно работает в начале и конце строки. Совсем что то завис, помогите?


Ответы (1 шт):

Автор решения: Wiktor Stribiżew

Используйте один из следующих способов:

$str = '10 20 150 50 750 550 50';
$str = preg_replace('~\b50\b~', '', $str);
$str = preg_replace('~(?<!\d)50(?!\d)~', '', $str);
$str = preg_replace('~(?<!\S)50(?!\S)~', '', $str);
$str = preg_replace('~(?<!\d\.|\d)50(?!\.?\d)~', '', $str);

Тут

  • \b50\b - границы слова
  • (?<!\d)50(?!\d) - цифровые границы
  • (?<!\S)50(?!\S) - пробельные границы
  • (?<!\d\.|\d)50(?!\.?\d) - это разновидность цифровых границ, найдёт 50, но не 50.35.
→ Ссылка