Ich versuche, eine Regexp zu konstruieren, die wahr für User-Agent
:s von "von Menschen navigierten Browsern", aber falsch für Bots. Natürlich wird der Abgleich nicht exakt sein, aber wenn er in etwa 90 % der Fälle richtig ist, ist das mehr als gut genug.
Mein bisheriger Ansatz besteht darin, die User-Agent
String der fünf wichtigsten Desktop-Browser (MSIE, Firefox, Chrome, Safari, Opera). Konkret möchte ich die Regexp NO um festzustellen, ob der Benutzer-Agent ein Bot ist (Googlebot, msnbot usw.).
Derzeit verwende ich die folgende Regexp, die die gewünschte Präzision zu erreichen scheint:
^(Mozilla.*(Gecko|KHTML|MSIE|Presto|Trident)|Opera).*$
Ich habe eine kleine Anzahl falscher Negativmeldungen beobachtet, bei denen es sich meist um mobile Browser handelt. Die Ausnahmen stimmen alle überein:
(BlackBerry|HTC|LG|MOT|Nokia|NOKIAN|PLAYSTATION|PSP|SAMSUNG|SonyEricsson)
Meine Frage ist: Wie würden Sie die Regexp angesichts des gewünschten Genauigkeitsgrads verbessern? Fallen Ihnen bei der gegebenen Regexp wesentliche falsch-positive oder falsch-negative Ergebnisse ein?
Bitte beachten Sie, dass sich die Frage speziell auf regexp-basierte User-Agent
passend. Es gibt noch eine Reihe anderer Ansätze zur Lösung dieses Problems, die aber nicht in den Rahmen dieser Frage fallen.