2016-09-28 15:45:38 2687次浏览 4条回答 0 悬赏 66 金钱

$str = "Mozilla/5.0 (Linux; Android 5.1.1; Nexus 6 Build/LYZ28E) AppleWebKit/537.36"

怎么能匹配到这中间的Nexus 6 呀,

以Android开头,以Build结尾?

啊。怎么匹配呀,正则这儿实在是太弱了。

最佳答案

  • javalzbin 发布于 2016-09-29 10:33 举报

    不一定要写正则啊,截取字符串也可以

    如果是安卓客户端的请求,这个信息头基本上都是这些格式,
    Dalvik/1.6.0 (Linux; U; Android 4.3; vivo X3L Build/JLS36C)

    Mozilla/5.0 (Linux; U; Android 2.3.6; zh-cn; GT-S7500 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML
    , like Gecko) Version/4.0 Mobile Safari/533.1

    Mozilla/5.0 (Linux; Android
    5.1.1; vivo X7 Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/39.0.0.0 Mobile Safari/537.36

    个人认为Build才是查找的关键,可以这么做

    /*
     * 查找Build字符串所在的位置,并截取字符串到这个位置为止
     * 得到:Mozilla/5.0 (Linux; Android 5.1.1; Nexus 6 
     */
    $str= substr($str, 0, strpos($str, "Build"));
    /*
     * 查找";"符号最后出现的位置,并且以这个位置开始截取字符串,直到最后
     * 得到:  Nexus 6 
     */
    $str= substr($str, strrpos($str,";")+1, strlen($str));
    /*
     * 去除前后空格
     */
    $str=trim($str);
    
    echo $str;
    
  • 回答于 2016-09-28 19:51 举报

    没关注过这个信息头,单从这一个字串来说,没法确定。
    至少得知道可能会有哪几种情况会出现才能有答案。

  • 回答于 2016-09-29 10:24 举报

    你是要检查一个字符串里是否有Nexus 6吗?

    1 条回复
    回复于 2016-09-29 10:31 回复

    我要吧它取出来

  • 回答于 2016-09-30 16:30 举报
     $str  = "Mozilla/5.0 (Linux; Android 5.1.1; Nexus 6 Build/LYZ28E) AppleWebKit/537.36";
    
     $rule = "/[\s\S]*(Nexus[\s]*6)[\s\S]*/i";
    
     preg_match($rule,$str,$matches);
    
     echo $matches[1];
    
     拿去试试吧^.^
    
    
您需要登录后才可以回答。登录 | 立即注册
xczizz
副总裁

xczizz 比尔吉沃特

注册时间:2016-03-08
最后登录:2020-11-09
在线时长:97小时50分
  • 粉丝6
  • 金钱4967
  • 威望90
  • 积分6837

热门问题