2013-01-11 68 views
0

可能重複:
Regular expression to match hostname or IP Address?Regrex從郵件頭獲取IP地址

我需要正則表達式得到電子郵件標頭中的IP地址。收到的部分有很多標題。

但我只想從具有這樣的模式的行讀取ipaddress。

Received: from unknown 124.253.91.178 by rediffmail.com via HTTP; 11 Jan 2013 10:10:35 -0000 

我試過下面regrex,但它會返回電子郵件標題文本的所有IP地址。

preg_match_all("/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/", $this->email, $matches); 

我想在一個行匹配Received:from字和IP地址經過。 IP地址可以是IPv6或IPv4

回答

1

你可以用下面的正則表達式的嘗試:

/^Received: .*?(\d{1,3}(?:\.\d{1,3}){3}))/ 

正則表達式爲IPv4和IPv6:

/^Received: .*?((?:\d{1,3}(?:\.\d{1,3}){3})|([a-z0-9]{4}(?::[a-z0-9]{4}){7}))/ 
+0

謝謝,如果IP地址是IPV6什麼與此類似,2001年:0db8:85a3:0042:1000:8a2e:0370:7334 –

+0

看看我的編輯。 – hsz

+0

我得到這個錯誤preg_match_all():編譯失敗:在偏移量不匹配的圓括號 –