Регулярка php удалить пробел?

Могут быть строки вида:

  1. 3 д панель
  2. панель 3 д
  3. панель 3 Д
  4. плитка 3 д. (может быть любой знак препинания)
  5. ул. Степана Разина 23 д 3 кв 3 (23 д Не должно замениться)

Если будет 223 д или 223 дом не должно заменяться. Нужно что бы в строке "3 д" заменилось на "3д" ли "3д.", может быть любой знак препинания после "д". Так же может быть большая "Д"

Помогите пожалуйста в регулярках не силен?


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

Автор решения: teran

видимо как-то так.

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

$txt = preg_replace('/(?<!\d)3\s+д\b/uigm', "3д", $txt)

https://regex101.com/r/bflMRc/1

→ Ссылка
Автор решения: Jigan2

В итоге сделал так

$text = preg_replace('#\b(3)\s*($|[Дд])($|[ .,!?:;])?#u', '$1$2$3', $text);

Благодарю всех за помощь!

→ Ссылка