How to not return a regex match if a user agent string contains Chrome?
我想创建一个regex模式,为safari用户代理字符串提供匹配。问题是,铬似乎也匹配:
Safari正则表达式:
1 | (?!Chrome).*Safari |
这仍然与chrome用户代理字符串相匹配,但我认为负面展望可以解决这个问题?
Chrome用户代理:
1 | Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 |
Safari用户代理:
1 | Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27 |
有人能为我提供一个regex解决方案吗?
更新:
我的答案是针对高效的用户代理regex来查找python中的safari,这并不能为这个问题提供regex解决方案。事实上,它根本没有解决这个问题,所以我很惊讶它被接受为一个答案
谢谢
您可以使用
1 | ^(?!.*Chrome).*Safari |
请参阅regex演示。
细节
^ —字符串的开头(?!.*Chrome) —如果行中断字符以外的0+字符后有Chrome 子字符串,则匹配失败。.* —除换行符以外的任何0+字符Safari —Safari 子串。
更新(解决您答案中的问题)
用于Safari的Regex:1 | ^(?!.*(?:Chrome|Edge)).*Safari |
铬的Regex:
1 | ^(?!.*Edge).*Chrome |
边缘的正则表达式:
1 | /Edge/ |
这工作:
1 | ^(?!.*\bChrome).*$ |
演示
或者,
1 | ^(?!.*\bChrome).*\bSafari |
如果你想找没有铬的狩猎比赛
您的regex
上面的答案对于桌面和Android都是正确的。对于iOS:
1 | ^(?!.*CriOS).*Safari |
你试过这个基本的吗?它只适合狩猎。
见REGEX101测试。
以@wiktor stribi为基础?ew&;@dawg回答得很好,我觉得这对于任何一个在用户代理字符串中包含"safari"的3个浏览器中寻找完整解决方案的人都很有用:
用于Safari的Regex:
1 | ^(?!.*Chrome|Edge).*Safari |
铬的Regex:
1 | ^.*Chrome(?!.*Edge) |
边缘的正则表达式:
1 | Edge |