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