正则表达式从电子邮件标题中获取IP地址

时间:2013-01-11 13:51:45

标签: php regex

  

可能重复:
  Regular expression to match DNS hostname or IP Address?

我需要正则表达式来从电子邮件标题中获取IP地址。收到的部分下有很多标题。

但是我想只从具有这种模式的行读取ipaddress。

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

我尝试了以下正则表达式,但它返回了电子邮件标题文本的所有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 个答案:

答案 0 :(得分: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}))/