可能重复:
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
答案 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}))/