Php 括号内的匹配模式
我正在尝试创建一个移动检测类,该类将用户代理剥离为一个简单的基本字符串,如下所示: 输出: 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 我使用这个: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.-]
/[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。添加了什么是什么解释。你现在使用的是什么模式?我相信这会对我有很大帮助。。将在一两个小时后测试它,我们将检查它是否按预期工作,如果是,我们将接受!谢谢