【问题标题】:Regex for getting IP address from email header [duplicate]用于从电子邮件标头获取 IP 地址的正则表达式 [重复]
【发布时间】: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("/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/", $this->email, $matches); 

我想在一行中匹配Received:from word 和 ip Address。 IP 地址可以是 IPv6 或 IPv4

【问题讨论】:

    标签: php regex


    【解决方案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}))/
    

    【讨论】:

    • 谢谢,如果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) { } }
    猜你喜欢
    • 2014-12-26
    • 1970-01-01
    • 2019-05-18
    • 2016-11-15
    • 2014-03-02
    • 2011-08-24
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    相关资源
    最近更新 更多