Regular expression to parse useragent string
我需要从字符串中提取数据。下面是一个例子:
Mozilla/5.0 (Macintosh; U; PPC Mac OS
X; tr-tr) AppleWebKit/418 (KHTML, like
Gecko) Safari/417.9.3
我想知道"Safari/"(417.9.3)之后的内容,但是:
"safari"字符串可以是任何字符大小写,也可以是字符串中的任何内容。
版本与"Safari"之间用"/"、"/"、"/"、"/"、"/"或任何空格分隔。
版本字符串以任何空格、")"、"("、";"或字符串结尾结尾。
有人能帮我建立这个吗?
谢谢!
- 您熟悉php:s get_browser吗?php.net/manual/en/function.get-browser.php
1
| preg_match("#Safari(\s+|/\s*)([^)(;]+)#i", $_SERVER['HTTP_USER_AGENT'], $results); |
末尾的i表示"不区分大小写",这符合标准1。
(\s+|\s*/\s*)?至少匹配一个空格字符,或者匹配前面和后面任意数量的空格字符(从零到无穷大或更大)的斜线,它处理条件2。
[^)(;]+将尽可能多地匹配不在集合内的字符,该集合处理标准3。
- For(Mozilla/5.0(Macintosh;U;PPC Mac OS X;EN-US)Applewebkit/412(KHTML,Like Gecko)Safari/412 Privoxy/3.0)"Your regex don't stop on the space.为什么?
- @Activist:because I forgot to put \sinside the last set([^();\s]+Instead of [^();]+贝西德斯,你应该尝试学习正常的表达方式。如果你能学会如何工作,那真的很容易。
- 我做到了,慢慢地学习问答和查询答案。
这不是你以前要求的火狐Regex吗?
1
| /Safari[ \/]+([0-9\.]+)/i |