0

我正在尝试制作一个移动检测类,该类应该将用户代理剥离为一个简单的基本字符串,如下所示:

输出: Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (KHTML, like Gecko) Chrome/* Safari/*

由此:

输入: (HTTP_USER_AGENT) Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17

我正在使用这个:/[0-9.-]{4,}/i模式来去除数字,我得到:

上述模式的结果: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/* (KHTML, like Gecko) Chrome/* Safari/*

但我的问题是如何删除X11;我想要的模式,该模式将删除第一个左括号之后的所有内容,直到第一个空白空间,我认为这是正确的方法。可接受的替代方案是能够使用图案完全移除括号。

有什么建议么?

PS:我需要这个来解决移动检测和对browscap的依赖问题。所以请不要拒绝投票!

PS2:这样做的主要目的是检测移动客户端和桌面。之后,我将对其进行调整以提供操作系统等信息。

4

2 回答 2

1

更换X11;但不是KHTML

preg_replace('/\([^,)]*? ([^\)]+)/','(*\1*',$agent);

在这里解释演示:http ://regex101.com/r/vL6gT1

于 2013-02-07T23:16:48.160 回答
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);
于 2013-02-07T23:18:01.293 回答