2016-02-15 67 views
2

我想從一個日誌文件中提取出IP地址,並得到一個空數組。preg_match_all正在輸出一個空數組

代碼:

$file = file('log.txt'); 
$ips = implode($fixed); 

$pattern2 = "/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/";  
preg_match_all($pattern2, $ips, $m); 
print_r($m[0]); 

$ips='http://localhost/articles/ Mozilla/5.0 (Windows NT 6.3; WOW64; rv:42.0) Gecko/20100101 Firefox/42.0 /articles/ 2-9-2016 17:55 24.100.248.111'; 

我在http://tryphpregex.com/測試圖案和它突出正好與上面的字符串的IP地址。

也可以preg_match_all接受數組中的值嗎?我沒有看到任何有關PHP的文檔。

我只是採取了所有的過濾邏輯和腳本的作品,顯然文件中的過濾器擺脫線條擺脫了所有的線。 blush。的$ IPS輸出是

Array 
    (
    [15] => Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 OPR/34.0.2044.98679/172.56.35.178 

    [16] => http://localhost/ Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 OPR/34.0.2044.98679 /articles/automate-it-all/ 172.56.35.178 
+0

當我測試了它在該網站上您的正則表達式不起作用。但它使用單個'\'而不是'\\'。你測試過了嗎? – Tekay37

+0

或者您可以使用單引號''〜[0-9] {1,3} \。[0-9] {1,3} \。[0-9] {1,3} \。[0- 9] {1,3}〜''雙重轉義應該用雙引號解析爲單個轉義。如果沒有,那將是一個問題。 – sln

+0

其實當我試圖把代碼放入stackoverflow.com它是預覽沒有反斜槓,我試過它與單個轉義字符 – Lid

回答

1

您的代碼:

$file = file('log.txt'); 
$ips = implode($fixed); 

應該是:

$file = file('log.txt'); 
$ips = implode($file); 
//    ^^^^ 
+0

$ fixed是一個數組,它有一個數組映射函數完成它和一個if語句來過濾掉我不需要的IP地址我開始懷疑preg_match_all是否在額外的空間上窒息... – Lid

+0

@Lid:Pleasr,編輯你的問題到有一個可重現的例子。添加一個'print_r($ ips)' – Toto

+0

我添加了print_r($ ips)的輸出,現在腳本工作正常,必須通過過濾函數來修復一些比較邏輯。正則表達式初學者,所以我認爲這是有問題的。 – Lid