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