Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 括号内的匹配模式_Php_Regex_Preg Match - Fatal编程技术网

Php 括号内的匹配模式

Php 括号内的匹配模式,php,regex,preg-match,Php,Regex,Preg Match,我正在尝试创建一个移动检测类,该类将用户代理剥离为一个简单的基本字符串,如下所示: 输出: Mozilla/5.0(*Linux x86_64*)AppleWebKit/*(KHTML,如 Gecko)Chrome/*Safari/* 由此: 输入:(HTTP\u用户\u代理) Mozilla/5.0(X11;Linux x86_64)AppleWebKit/537.17(KHTML,如Gecko) Chrome/24.0.1312.69 Safari/537.17 我使用这个:/[0-9.-]

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

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

由此:

输入:(HTTP\u用户\u代理) 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:其主要目的是检测移动客户端和桌面。之后,我将调整它以提供操作系统的信息,等等。

替换X11但不KHTML

preg_replace('/\([^,)]*? ([^\)]+)/','(*\1*',$agent);
此处演示说明:

尝试使用

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);

也许PHP的
get\u browser()
会有所帮助。是的,但我正试图用一个纯PHP代码和一个.ini文件来实现它,因为并不是所有的主机提供商都提供安装的和/或最新的browscap。你能给我们一些输入和输出示例吗?@ExplosionPills done。添加了什么是什么解释。你现在使用的是什么模式?我相信这会对我有很大帮助。。将在一两个小时后测试它,我们将检查它是否按预期工作,如果是,我们将接受!谢谢