Использование регулярных выражений для сопоставления строк, если они содержат «MSIE», но НЕ, если они содержат «Opera» - PullRequest
1 голос
/ 22 декабря 2011

Моя конечная цель - использовать регулярные выражения для сопоставления строк HTTP_USER_AGENT для IE 7 и ниже PLUS Opera 9.0 и ниже.

Это потому, что это браузеры, которые не поддерживают CSS "box-sizing"

Я не очень разбираюсь в синтаксисе регулярных выражений.

Но я просмотрел список "http user agent", который нашел в Google для Opera и IE

(MSIE [2-7]\.+)|(rv:1\.8\.1\.1+)|(Opera/[4-8]\.+)|(Opera [4-8]\.+)|(Opera\/9\.00+)

Это регулярное выражение, которое я использую, чтобы сопоставить все HTTP_USER_AGENTS в указанных выше списках. (Я не уверен, что список содержит ВСЕ возможные пользовательские агенты. Вероятно, нет)

Но в любом случае, это регулярное выражение соответствует им всем. но это также соответствует некоторым более новым версиям Opera

например.

Mozilla/4.0 (compatible; MSIE 6.0; X11; Linux i686; de) Opera 10.10
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 6.0; tr) Opera 10.10
Mozilla/4.0 (compatible; MSIE 6.0; Linux i686 ; en) Opera 9.70
Mozilla/4.0 (compatible; MSIE 6.0; X11; Linux x86_64; en) Opera 9.60
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ru) Opera 9.52

Так что я на шаг впереди. Отличительным фактором являются ВСЕ ОПЕРА версии 9 PLUS, которые содержат «MSIE 6». ТАКЖЕ содержат "Opera" в конце.

Так что мне нужно изменить свое регулярное выражение, чтобы оно соответствовало ВСЕМ "MSIE 6." строки, которые не содержат "OPERA"

Как я уже сказал, регулярное выражение, которое у меня сейчас есть, может быть не самым лучшим. Но я новичок в регулярных выражениях!

Спасибо

Alex

1 Ответ

1 голос
/ 22 декабря 2011

Вы можете использовать отрицательный прогноз, чтобы не соответствовать значениям MSIE, за которыми следует Opera, например:

MSIE [2-7]\.\d+(?!.*Opera)|Opera[ /](?:[4-8]\.\d+|9\.00)|Opera$
...