用于从电子邮件标头获取 IP 地址的正则表达式 [重复]
Posted
技术标签:
【中文标题】用于从电子邮件标头获取 IP 地址的正则表达式 [重复]【英文标题】:Regex for getting IP address from email header [duplicate] 【发布时间】:2012-12-26 02:48:48 【问题描述】:可能重复: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("/\d1,3\.\d1,3\.\d1,3\.\d1,3/", $this->email, $matches);
我想在一行中匹配Received:
和from
word 和 ip Address。 IP 地址可以是 IPv6 或 IPv4
【问题讨论】:
【参考方案1】:您可以尝试以下正则表达式:
/^Received: .*?(\d1,3(?:\.\d1,3)3))/
IPv4 和 IPv6 的正则表达式:
/^Received: .*?((?:\d1,3(?:\.\d1,3)3)|([a-z0-9]4(?::[a-z0-9]4)7))/
【讨论】:
谢谢,如果ip地址是IPV6 像这样,2001:0db8:85a3:0042:1000:8a2e:0370:7334 我得到了这个错误 preg_match_all(): Compilation failed: unmatched parentheses at offset 但是没有返回IP地址,print_r($matches) OUTPUT:array(3) [0]=> array(0) [1]=> array(0) [2]=> array(0)
以上是关于用于从电子邮件标头获取 IP 地址的正则表达式 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
用于从封闭字符串中提取 IP 地址和端口的简单 Java 正则表达式