2013-12-08 55 views
0

我想用正則表達式來使用一條線,但我不知道正則表達式是如何工作的。正則表達式URL解析

這是我現在使用的模式,

^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}).*?"(.*?/p/.*?,\d+,(\d+).*?)" "(\d+)" "(\d+)".*$ 

的樣本行我會pharse使用模式。

124.99.152.202 - naveen [22/Nov/2013:10:41:17 +1300] "GET /p/V4ZkA5d074CTy_vbFa7nLw,1385070078,888888888888888/FOLDER-NUMBER/i-dont-need-this-folder/nope/12.txt HTTP/1.1" "200" "8" "-" "Mozilla/5.0" "-" 

現在的問題是我需要從上面的採樣線獲得一點信息。

「GET/P/V4ZkA5d074CTy_vbFa7nLw,1385070078,888888888888888/FOLDER-NUMBER /12.txt HTTP/1.1」

我如何獲得這個FOLDER-NUMBER整數值?

我試過,但我不知道如何過濾出來,Regex Fiddle

^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}).*?"(.*?/p/.*?,\d+,(\d+)/**FOLDER-NUMBER**/.*?)" "(\d+)" "(\d+)".*$ 
+1

這看起來像一個Web服務器日誌。微軟公司生產了一款叫做LogParser的GREAT產品,可以讓你在日誌文件上運行各種解析方案。 –

+0

是的,這是一個Linux服務器日誌。謝謝,但我會解析使用PHP。 :) –

+0

是你想要的文件夾號碼總是相同數量的文件夾深? '/ P/XXXX/what_you_want'?或者有時是不同的(在這種情況下,你會發現這更具挑戰性)? – brandonscript

回答

1

使用你的例子,假設你一直在尋找相同數量的深層的文件夾,你可以使用:

\].*?\/.*?\/.*?\/(.*?)\/

在此提供的示例中,第一個匹配的組將是您想要的文件夾編號。

看到一個工作示例:http://regex101.com/r/bO0aI1

要通過PHP檢索此,使用方法:

preg_match(/\].*?\/.*?\/.*?\/(.*?)\//g, $yourLogLine, $matches); 
echo $matches[1]; //the first matched group 
+0

太好了,謝謝,我同步了你的代碼我擁有的一個完美的作品。謝謝。 :) –