В попытках нормализовать текст для нечеткого соответствия я пытаюсь объединить односимвольные слова (в основном части инициализма) в одно слово. Числа игнорируются. Вот где я нахожусь:
$strings = array("CROWN ROYAL X R CANADIAN WHISKEY", "CROWN ROYAL X R", "REMY V S O P 8 0", "BARTON L I I T");
$string = preg_replace('/\b([A-Z]){1}\s([A-Z]){1}\b/', '\1\2', $string);
Результаты:
«CROWN ROYAL XR CANADIAN WHISKEY», «CROWN ROYAL XR», «REMY VS OP 8 0», «BARTON LI IT»
Мне нужен ВСОП и ЛИИТ. Я реализовал обходной путь с помощью $string = preg_replace('/\b([A-Z]){1}\s([A-Z]){1}([A-Z]){1}\s([A-Z]){1}\b/', '\1\2\3\4', $string);
во-первых, но я уверен, что есть более изящное и менее затратное решение?
Проверь это
$strings = preg_replace('~(?<=\b[A-Z])\s+(?=[A-Z]\b)~', '', $strings);
Других решений пока нет …