正则表达式:收紧 IPv4 正则表达式以省略 ESMTPSA id?
Regex: Tightening up an IPv4 regex to omit ESMTPSA id?
ESMTPSA id 是一个类似于以下内容的字符串:
w12sm4743917pbs.68.2015.06.04.16.21.51
它可以出现在Received: from header in email中,比如在下面的例子中:
Received: from [192.168.0.140] (n11649196059.netvigator.com. [116.49.196.59])
by mx.google.com with ESMTPSA id w12sm4743917pbs.68.2015.06.04.16.21.51
for <myemailaddress@gmail.com>
(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
Thu, 04 Jun 2015 16:21:52 -0700 (PDT)
我有以下正则表达式,可以很好地从 header:
中提取 IPv4 地址
d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
问题是,它也在提取 ESMTPSA id 的一部分:015.06.04.16。查看实际效果 here。
我们如何收紧正则表达式,使其只提取 IPv4 地址?注意:地址 而不是 始终在方括号中,如上例所示。我正在使用 Python 并且我知道我可以使用 ipaddress
模块来验证所有匹配,但是首先不匹配对我来说会方便得多。
[^\.\d]\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}[^\.\d]
and trim 字符串开头和结尾的 1 个符号(或使用捕获组)
PS 或者在 my
之后简单地使用你的第一个正则表达式
PS2 捕获组
[^\.\d](\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})[^\.\d]
大多数正则表达式工具允许您按数字(按顺序)获取捕获组,如 \1 或类似的
ESMTPSA id 是一个类似于以下内容的字符串:
w12sm4743917pbs.68.2015.06.04.16.21.51
它可以出现在Received: from header in email中,比如在下面的例子中:
Received: from [192.168.0.140] (n11649196059.netvigator.com. [116.49.196.59])
by mx.google.com with ESMTPSA id w12sm4743917pbs.68.2015.06.04.16.21.51
for <myemailaddress@gmail.com>
(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
Thu, 04 Jun 2015 16:21:52 -0700 (PDT)
我有以下正则表达式,可以很好地从 header:
中提取 IPv4 地址d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
问题是,它也在提取 ESMTPSA id 的一部分:015.06.04.16。查看实际效果 here。
我们如何收紧正则表达式,使其只提取 IPv4 地址?注意:地址 而不是 始终在方括号中,如上例所示。我正在使用 Python 并且我知道我可以使用 ipaddress
模块来验证所有匹配,但是首先不匹配对我来说会方便得多。
[^\.\d]\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}[^\.\d]
and trim 字符串开头和结尾的 1 个符号(或使用捕获组)
PS 或者在 my
之后简单地使用你的第一个正则表达式PS2 捕获组
[^\.\d](\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})[^\.\d]
大多数正则表达式工具允许您按数字(按顺序)获取捕获组,如 \1 或类似的