Я пытаюсь создать regexp, который оценит к истинному для User-Agent
:s "браузеров, по которым перемещаются люди", но ложь для ботов. Само собой разумеется, соответствие не будет точно, но если оно разбирается, вещи в говорят, что 90% случаев, которые более, чем достаточно хороши.
Мой подход до сих пор должен предназначаться User-Agent
строка пять главных настольных браузеров (MSIE, Firefox, Chrome, Safari, Opera). Конкретно я хочу, чтобы regexp НЕ соответствовал, если агент пользователя является ботом (Googlebot, msnbot, и т.д.).
В настоящее время я использую следующий regexp, который, кажется, достигает желаемой точности:
^(Mozilla.*(Gecko|KHTML|MSIE|Presto|Trident)|Opera).*$
Я наблюдал небольшое количество ложных отрицательных сторон, которые являются главным образом мобильными браузерами. Исключения все соответствие:
(BlackBerry|HTC|LG|MOT|Nokia|NOKIAN|PLAYSTATION|PSP|SAMSUNG|SonyEricsson)
Мой вопрос: Учитывая желаемый уровень точности, как Вы улучшили бы regexp? Можно ли думать о каких-либо главных ложных положительных сторонах или ложных отрицательных сторонах к данному regexp?
Обратите внимание на то, что вопрос конкретно о находящемся в regexp User-Agent
соответствие. Существует набор других подходов к решению этой проблемы, но это вне объема этого вопроса.
Многие сканеры не отправляют заголовок Accept-Language, в то время как, AFAIK, все браузеры отправляют. Вы можете объединить эту информацию с вашим регулярным выражением, чтобы получить более точные результаты.
Вы можете создать черный список, проверив, какие пользовательские агенты обращаются к robots.txt.