我正在写一个正则表达式来匹配电子邮件地址,但前提是电子邮件之前没有特定的前缀。 (这似乎适用于任何非文字字符串匹配项,在经过负向后看之后。)
我曾尝试使用负向后看,但只有在存在前缀的情况下,才成功设法不匹配电子邮件地址的第一个字符。
(?<!From: )([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)
首先,不要介意电子邮件地址匹配器,它很粗糙,但在我的用例中有效,并且这个问题可能适用于任何非文字字符串-matcher,将捕获组替换为文字可以正常工作。< / p>
如果前缀"From: "
前面没有,我希望它匹配的是电子邮件地址。
该地址与地址不符
18.4.2019 9:35:02.115(22)->:From: address@subdomain.domain.tld
这应该与地址匹配
RCPT TO:<address@domain.tld>
我尝试过的正则表达式可以正确匹配不带前缀的电子邮件地址,但是在前缀情况下,它也可以匹配电子邮件地址,除了第一个字母(显然是唯一一个与后面的否定字母匹配)之外。确实有道理。
是否有一种方法可以消除负面印象,从而将其应用于整个捕获群体?还是应该用另一种表达方式来解决?
答案 0 :(得分:1)
答案 1 :(得分:0)
另一种选择是使用alternation来匹配您不需要的内容并捕获您想要的内容:
what you do not want|(what you do want)
您的模式可能类似于:
From: [a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+|([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)