2010-07-02 50 views
4

我需要再次幫助我正在嘗試做的一些正則表達式(仍然處於沉重的學習階段)。PHP與瀏覽器代理字符串一起工作的正則表達式

我試圖通過解析用戶代理來學習。試圖做的Firefox現在......

採取考慮到這些的UA:

- Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.15) Gecko/2009101601 Firefox 2.1 (.NET CLR 3.5.30729) 
- Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.20) Gecko/20081217 Firefox(2.0.0.20) 
- Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1) Gecko/20090624 Firefox/3.1b3;MEGAUPLOAD 1.0 (.NET CLR 3.5.30729) 
- Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.3a3pre) Gecko/20100306 Firefox3.6 (.NET CLR 3.5.30729) 
- Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.19) Gecko/20081202 Firefox (Debian-2.0.0.19-0etch1) 
- Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6 (.NET CLR 3.5.30729) 
- Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.13) Gecko/20080313 Firefox 

我試圖做一個正則表達式,將提取的Firefox版本了尿酸。

下面是規則我想:在「火狐」的字符串後

  1. 的版本總是(「火狐」可以在任何字符情況下)。
  2. 版本字符串可以在「/」或空格之後開始,也可以在「(」或甚至沒有任何內容之後開始
  3. 版本字符串以空白或字符串的結尾結尾或通過關閉括號或一個分號。
  4. 在未提供版本的一些罕見的情況下(見最後UA)的正則表達式必須匹配,但返回一個空字符串版本(如果可能)。

我認爲是的。如果任何人都可以幫助它會很棒!

+0

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

回答

5

像這樣的東西應該工作:

/Firefox[ \(\/]*([a-z0-9\.\-]+)/i 
+0

似乎工作,但在我原來的問題中增加了#4。 – Activist 2010-07-02 00:23:47

+3

對於#4,把+變成*,就像這樣:'/ Firefox [\(\ /] *([a-z0-9 \。\ - ] *)/ i' – casablanca 2010-07-02 00:30:22

+0

它對我來說失敗了#5,匹配'Debian-2.0.0.19-0etch1'。不知道這是否是OP所需要的,我完全不符合它:S – alex 2010-07-02 00:32:58

0

下面將匹配所有提供的國家:

#^Mozilla/.*\bFirefox\b# 

這意味着:

「匹配任何字符串開頭 」的Mozilla /「,後跟任意字符,其次是」 Firefox「作爲一個單詞。

在此上下文中的\ b單詞斷開強制匹配單詞和非單詞字符之間的邊界。不知道是否有必要,但它會阻止Firefox出現在另一個詞中,例如「MyFirefox」或「Firefoxy」。

**我喜歡用散列代替斜槓在我的正則表達式,因爲我經常需要匹配一個斜線,這讓我少困惑。*

0

取決於你想實現的,它是什麼在Gecko上可能比Firefox更聰明。但是,這意味着它將匹配基於Mozilla的Gecko的非Firefox瀏覽器(但這可能是期望的行爲)。

#Mozilla/.*\bGecko/\d+#