在 exim 日志中为这些行编写正则表达式时遇到了一些问题
1. 2011-05-12 11:30:26 1QKRHt-0001aD-Vd => mail <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="abc6cac2c7ebc6cac2c785ced3cac6dbc7ce85c8c4c6" rel="noreferrer noopener nofollow">[email protected]</a>> F=<<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0c7e6363784c69746d617c6069226f6361" rel="noreferrer noopener nofollow">[email protected]</a>> bla bla
2. 2011-04-22 12:01:31 1QDCF0-0002ss-Nw => /var/mail/mail <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="ef9d80809baf828e8683c1828a8e839c9b9d8082c1809d88c19a8e" rel="noreferrer noopener nofollow">[email protected]</a>> F=<<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="01736e6e75416479606c716d642f626e6c" rel="noreferrer noopener nofollow">[email protected]</a>> bla bla
3. 2011-05-12 11:29:01 1QKRGU-0001a5-Ok => <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0d606c64614d606c64612368756c607d6168236e6260" rel="noreferrer noopener nofollow">[email protected]</a> F=<<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="04766b6b7044617c65697468612a676b69" rel="noreferrer noopener nofollow">[email protected]</a>> bla bla
我想把这个变量 [email protected] 在一个正则表达式中。我尝试使用以下逻辑:找到“F=”之前的最后一个字符串,以空格分隔,并且可以锁定在< >
你能帮我写一下这个逻辑吗?
最佳答案
您可以使用以下正则表达式:
# the line should be in variable $line
if ($line =~ /.*?\s+<?(\S+?)>?\s+F=/) {
# ...
}
然后最好用 Mail-RFC822-Address 验证您的匹配。 perl 模块,因此完整代码可能是:
use Mail::RFC822::Address qw(valid);
# the line should be in variable $line
if ($line =~ /.*?\s+<?(\S+?)>?\s+F=/) {
if (valid($1)) {
# ...
}
}
关于regex - Perl 正则表达式 获取电子邮件地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5988294/