我想创建一个正则表达式模式,它将为safari用户代理字符串提供匹配。问题是Chrome似乎也匹配:
Safari Regex:
(?!Chrome).*Safari
这仍然与Chrome用户代理字符串匹配,但我认为负面展望可以解决此问题吗?
Chrome用户代理:
Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36
Safari用户代理:
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
有人可以为我提供正则表达式解决方案吗?
更新
我在Efficient User-Agent Regex to find Safari in Python处找到的答案并未提供此问题的正则表达式解决方案。事实上,它根本没有解决这个问题,所以我很惊讶它被接受为答案
由于
答案 0 :(得分:2)
您可以使用
^(?!.*Chrome).*Safari
请参阅regex demo。
<强>详情
^
- 字符串的开头(?!.*Chrome)
- 如果除了换行符之外的0 +字符之后有Chrome
子字符串,则匹配失败.*
- 除了换行符之外的任何0 +字符Safari
- Safari
substring。更新(修复答案中的问题)
^(?!.*(?:Chrome|Edge)).*Safari
^(?!.*Edge).*Chrome
/Edge/
答案 1 :(得分:1)
这有效:
^(?!.*\bChrome).*$
或者,
^(?!.*\bChrome).*\bSafari
如果您正在寻找没有专门针对Chrome的Safari比赛
你的正则表达式(?!Chrome).*Safari
的问题是你需要.*
来匹配字符串开头的负面外观断言中Chrome
前面的内容。
答案 2 :(得分:0)
建立在@WiktorStribiżew&amp; @dawg非常好的答案,我觉得对于那些寻找在其用户代理字符串中包含“safari”的3个浏览器的完整解决方案的人来说,这可能是有用的:
Safari的正则表达式:
^(?!.*Chrome|Edge).*Safari
适用于Chrome的正则表达式:
^.*Chrome(?!.*Edge)
Regex for Edge:
Edge
答案 3 :(得分:0)
答案 4 :(得分:0)
以上答案适用于桌面和Android。 对于iOS:
^(?!.*CriOS).*Safari