PHP preg_replace() Оставляйте только слова в верхнем регистре

Как я могу оставить только слова в верхнем регистре, цифры, специальные символы или слова, где первая буква в верхнем регистре, но она содержит не более 3 символов, с preg_replace.

Например:

Portocjnk Karaer HDS-C 7/11, 9/15, 8/15-E => HDS-C 7/11, 9/15, 8/15-E

Керхер Керхер B 140 R Bp => B 140 R Bp

Karcher Karcher B 140 R Bsp Трр => B 140 R Bsp Трр

Tatata Tatat Yard-Man YM 84 МВт 31AY97KV643 => YM 84 МВт 31AY97KV643

(Татата) (Татат) Двор-человек YM 84 МВт 31AY97KV643 => YM 84 МВт 31AY97KV643

Заранее спасибо.

2 ответа

Решение
preg_replace('|\b([A-Z][a-z][a-z][a-z][a-z\-]*)\b|','',$text);

этот будет работать с большей частью вашего примера

Это был бы упрощенный подход белого списка. Вместо preg_replacing это сначала извлечет нужные части. И после этого массив $result должен быть повторно объединен.

preg_match_all('#\b[A-Z\d][A-Z\d/,-]*\b|\b(?<!-)[A-Z][a-z]{1,2}\b#', $str, $result);
$result = implode(" ", $result[0]);

Возможно, вам придется добавить еще несколько "специальных" символов во второй [...] класс персонажей.

Проверьте https://stackru.com/questions/89718/is-there-anything-like-regexbuddy-in-the-open-source-world для некоторых хороших инструментов, которые могут помочь в разработке регулярных выражений.

Другие вопросы по тегам