PHP中的Reg表达式

PHP中的Reg表达式,php,regex,user-agent,Php,Regex,User Agent,我知道这是怎么回事,但是有人能给我解释一下PHP中这个字符串的reg-ex语法吗 if (preg_match("/(?:iPhone|Android.*Mobile)/", $user_agent) > 0) { 我知道它会在用户代理字符串中找到iPhone或Android,这就是我要找的: ? means what - beginning of string? : means what - characters leading up to the search phrase? .*M

我知道这是怎么回事,但是有人能给我解释一下PHP中这个字符串的reg-ex语法吗

if (preg_match("/(?:iPhone|Android.*Mobile)/", $user_agent) > 0) {
我知道它会在用户代理字符串中找到iPhone或Android,这就是我要找的:

? means what - beginning of string?
: means what - characters leading up to the search phrase?
.*Mobile means it will only match iPhone blah blah Mobile or Android blah blah Mobile?
还有一个问题-我们需要“>0”来表示匹配,还是我可以只做一个“如果”表达式

谢谢。

(?:…)
是非捕获组

是一个“通配符”,将匹配除换行符以外的任何字符
*
是一个量词,表示0或更多次<代码>*表示任何字符0次或更多次

(?:iPhone | Android.*Mobile)
表示
iPhone
或(这就是
|
的用途)
Android
Mobile
,两个词之间有任意数量的字符

在这个正则表达式中,实际上不需要非捕获组,即使写为:

if (preg_match("/iPhone|Android.*Mobile/", $user_agent) > 0) {

编辑:哦,忘了提到
>0
部分也不是必需的
preg_match
已返回0或1,该值将被
视为布尔值。如果
是正确的,则不需要此测试的
>0
部分。函数失败时返回0,成功时返回1,因此只要使用
if
即可。谢谢大家的帮助。我们试图实现的是基于iOS或Android版本的特定页面路由。开发我们的搜索应用程序的团队大约4年前就这样做了,但它不适用于iOS 6或Android 4。我们将阅读iOS/Android版本,然后根据旧/新版本重定向。所以我的下一步是:如果(preg_match(“/iPhone IOS\d|Android\d.*Mobile/”,$user_agent){move function}@Tensigh好。
\d
匹配一个数字(和一些其他字符,但通常可以使用这个)。正则表达式将与iPhone IOS 6或Android 6a0某物之类的东西相匹配。我不确定第一个下划线是否是故意的,
\d.\d中的第一个点应转义:
\d\.\d
(因为请记住
是一个通配符)对于未来的版本,我建议:
\d+\.\d+
(允许6.10等)。你可能需要更多的帮助吗?谢谢,Jerry。这将是一个很大的帮助。下划线的用意是——当我查看我们的用户代理日志时,几乎所有iPhone日志的格式都是IOS X_Y或X_Y_Z。让我明天试试,我会发布结果。Jerry,这很有效。我首先简化了正则表达式:(“/iPhone OS 6 | Android 4*.Mobile/”),但我很快会对其进行更改,以便它能够更动态地适应其他版本。