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 для некоторых хороших инструментов, которые могут помочь в разработке регулярных выражений.