Выбрать все слова, которых нет в списке

Matinier

Постоялец
Регистрация
5 Окт 2009
Сообщения
65
Реакции
4
Добрый день.
Имеется набор строк такого типа: Карта памяти microSD 2GB GoodRam + SD адаптер
Необходимо из нее вытащить вендора, т.е. GoodRam.
Вытаскивал такой вот регуляркой:

Код:
~(?:^|\s+)([a-z&-]{3,})\s+~iu

Однако она вытаскивает и microSD. По этому поводу возник вопрос: как можно выбрать все слова [a-z]{3,}, за исключением заранее заданного списка слов вроде microSD, HDMI и т.п.
 
1) заменой на пустое место в обычном текстовом редакторе
2) Для просмотра ссылки Войди или Зарегистрируйсязаменой текста
 
Это надо делать программно в процессе обработки немаленького xls-файла.
То есть предварительно открыть его и позаменять все совпадения не получится.
 
Так?

PHP:
$stopwords = array("microSD", "HDMI");
$str = "microSD 2GB GoodRam + SD адаптер";
$str = str_replace($stopwords, "", $str);
preg_match("~(?:^|\s+)([a-z&-]{3,})\s+~iu", $str, $matches);
 
echo $matches[1];
 
С такой регуляркой выпадут все бренды типа HP, WD и 3Q. С другой стороны, будут траблы с такими вариантами, как Hewlett Packard и Western Digital. Может быть, чем список стоп-слов делать, лучше пройтись по вариантам брендов, и их потом искать в строке? Судя по области из примера, брендов будет не так уж много.
 
Это надо делать программно в процессе обработки немаленького xls-файла.
То есть предварительно открыть его и позаменять все совпадения не получится.
А если использовать sed для замены стоп слов на пустые в начале, а потом уже обработать регуляркой?
 
Назад
Сверху