我正在尝试创建一个移动检测类,它应该将用户代理剥离为一个简单的基本字符串,如下所示:
输出: Mozilla / 5.0(* Linux x86_64 *)AppleWebKit / *(KHTML,如 Gecko)Chrome / * Safari / *
来自:
输入:(HTTP_USER_AGENT) Mozilla / 5.0(X11; Linux x86_64)AppleWebKit / 537.17(KHTML,和Gecko一样) Chrome / 24.0.1312.69 Safari / 537.17
我正在使用这个:/[0-9.-]{4,}/i
模式来删除数字,我得到:
结果我上面的模式远远超过: Mozilla / 5.0(X11; Linux x86_64)AppleWebKit / *(KHTML,和Gecko一样) Chrome / * Safari / *
但我的问题是如何删除X11;
我想要一个模式,它将删除第一个开始括号后的所有内容,直到第一个空白区域,我认为这是正确的方法。可接受的替代方案是能够用模式删除括号。
有什么建议吗?
PS:我需要这个解决移动检测的问题和对browscap的依赖。所以,请不要请誓言!
PS2:这主要是为了检测移动客户端和桌面。之后我会调整它以提供操作系统的信息等。
答案 0 :(得分:1)
替换 X11; 但不是 KHTML :
preg_replace('/\([^,)]*? ([^\)]+)/','(*\1*',$agent);
在此解释演示:http://regex101.com/r/vL6gT1
答案 1 :(得分:1)
尝试使用
preg_replace('/[0-9.-]{4,} #your original regex
| # OR
( # start capture
\( # open paren
) # end capture (so we can put the paren back)
[^\s]+ # any number of non-space characters
\d # a digit
[^\s]+ # the remaining non-space characters (including other digits)
\s # the final space
/xi', '\1', $str);