【问题标题】:Regular expression to parse useragent string正则表达式解析用户代理字符串
【发布时间】:2010-07-02 17:05:27
【问题描述】:

我需要从字符串中提取数据。举个例子:

Mozilla/5.0(Macintosh;U;PPC Mac OS X; tr-tr) AppleWebKit/418 (KHTML, 像 壁虎)Safari/417.9.3

我想得到“Safari/”(417.9.3) 之后的内容但是

  1. “Safari”字符串可以是任何字符大小写,并且可以在字符串中的任何位置。
  2. 版本与“Safari”由“/”、“/”、“/”、“/”或任何空格分隔。
  3. 版本字符串以任何空格、“)”、“(”、“;”或字符串结尾结尾。

谁能帮我建立这个?

谢谢!

【问题讨论】:

标签: php regex


【解决方案1】:
preg_match("#Safari(\s+|/\s*)([^)(;]+)#i", $_SERVER['HTTP_USER_AGENT'], $results);

末尾的i 表示“不区分大小写”,它符合标准一。

(\s+|\s*/\s*)? 匹配至少一个空白字符或斜线前后任意数量的空白字符(从零到无穷大及以上),满足条件二。

[^)(;]+ 将匹配尽可能多的字符,这些字符在集合中不是,满足条件三。

【讨论】:

  • 对于 "(Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-us) AppleWebKit/412 (KHTML, like Gecko) Safari/412 Privoxy/3.0" 你的正则表达式不会停止在空间上。为什么?
  • @Activist:因为我忘了把\s放在最后一组([^();\s]+而不是[^();]+)。此外,您应该尝试学习正则表达式。如果您了解了它的工作原理,那么您可以自己完成一个非常简单的解决方案。
【解决方案2】:

这不是和你之前要求的 Firefox 正则表达式类似吗?

/Safari[ \/]+([0-9\.]+)/i

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    相关资源
    最近更新 更多