首页 > 解决方案 > 使用正则表达式验证用户代理

问题描述

我正在尝试验证具有以下格式的用户代理

Mozilla/5.0 (Linux; U; Android <android>; <locale>; <device> Build/<build>) AppleWebKit/<webkit> (KHTML, like Gecko) Version/4.0 Mobile Safari/<safari>

用户代理可以是 ie

Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; AFTB Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30

到目前为止我的正则表达式是

Mozilla\/5\.0 \(Linux; U; Android (\d+\.)?(\d+\.)?(\*|\d+); [a-z]{2}-[a-z]{2} (AFTA|AFTN|AFTS|AFTB|AFTT|AFTM|AFTKMST12|AFTRS) Build\/([A-Z0-9])\) AppleWebKit\/(\d+\.)?(\*|\d+) \(KHTML, like Gecko\) Version\/4\.0 Mobile Safari\/(\d+\.)?(\*|\d+)

测试:https ://regex101.com/r/nXKYBB/1

但它不匹配。它有什么问题?

标签: regexuser-agent

解决方案


你错过了一个;之后en-de+之后[A-Z0-9]

Mozilla\/5\.0 \(Linux; U; Android (\d+\.)?(\d+\.)?(\*|\d+); [a-z]{2}-[a-z]{2}; (AFTA|AFTN|AFTS|AFTB|AFTT|AFTM|AFTKMST12|AFTRS) Build\/([A-Z0-9]+)\) AppleWebKit\/(\d+\.)?(\*|\d+) \(KHTML, like Gecko\) Version\/4\.0 Mobile Safari\/(\d+\.)?(\*|\d+)

查看正则表达式演示

(?:...)请注意,如果您不打算稍后使用那些捕获的子值,那么匹配非捕获组而不是捕获组可能是一个好主意,并使用它\s来匹配空格。

此外,如果您打算匹配整个字符串,请使用^and包装模式$


推荐阅读