2010-07-02 65 views
2

我需要從字符串中提取數據。下面有一個例子:解析useragent字符串的正則表達式

的Mozilla/5.0(Macintosh的; U; PPC的Mac OS X; TR-TR)爲AppleWebKit/418(KHTML,像 壁虎)Safari瀏覽器/ 417.9.3

我想要得到的「野生動物園/」(417.9.3)後有什麼

  1. 的「野生動物園」字符串可以是任何字符的情況下,可以將字符串中anywhaere。
  2. 版本通過「/」,「/」,「/」,「/」或任何空格與「Safari」分開。
  3. 任何空白版本字符串結束, 「)」, 「(」, 「;」 或字符串的結尾

任何人都可以幫助我建立這件事

感謝。?!

+0

您是否熟悉PHP:'get_browser'? http://php.net/manual/en/function.get-browser.php – 2010-07-02 17:19:59

回答

4
preg_match("#Safari(\s+|/\s*)([^)(;]+)#i", $_SERVER['HTTP_USER_AGENT'], $results); 

i的在端部的意思是「不區分大小寫」,其應答的標準之一。

(\s+|\s*/\s*)?要麼至少比賽一個空白字符或一個斜槓,前後有任意數量的空白字符(從零到無窮大或更大),其中標準爲兩個。

[^)(;]+將匹配儘可能多的字符,其中而不是集合內,其中地址標準三。

+0

對於「(Mozilla/5.0(Macintosh; U; PPC Mac OS X; en-us)AppleWebKit/412(KHTML,如Gecko)Safari/412 Privoxy/3.0「你的正則表達式不會在這個空間停下來,爲什麼? – Activist 2010-07-02 21:06:37

+0

@活動:因爲我忘了把'\ s'放在最後一個集合('[^(); \ s] +'而不是' [^();] +')。此外,你應該嘗試學習正則表達式。如果你瞭解它的工作原理,那麼你可以自己完成一個非常簡單的解決方法。 – zneak 2010-07-02 21:38:45

+0

我這樣做,通過提問和檢查答案來慢慢學習。 .. – Activist 2010-07-03 18:41:22

0

這與您以前所要求的Firefox正則表達式不相似嗎?

/Safari[ \/]+([0-9\.]+)/i 
相關問題