首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只有在不存在已知前缀的情况下才匹配电子邮件地址

只有在不存在已知前缀的情况下才匹配电子邮件地址
EN

Stack Overflow用户
提问于 2019-04-30 04:45:52
回答 2查看 148关注 0票数 3

我正在编写一个regex表达式来匹配电子邮件地址,但前提是在电子邮件之前不存在特定的前缀。(这似乎适用于负查找后的任何非文字字符串匹配器。)

我尝试过使用负查找,但只有在前缀存在的情况下,我才成功地设法不匹配电子邮件地址的第一个字符。

代码语言:javascript
复制
(?<!From: )([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)

首先,不要介意电子邮件地址匹配器,它是粗糙的,但在我的用例中有效,这个问题可以适用于任何非文字字符串-matcher,将捕获组替换为按预期工作的文字。

我想要它匹配的是电子邮件地址,如果前缀"From: "不在前面。

这不应该与地址匹配。

代码语言:javascript
复制
18.4.2019 9:35:02.115(22)->:From: address@subdomain.domain.tld

这应该与地址相匹配

代码语言:javascript
复制
RCPT TO:<address@domain.tld>

我尝试的regex方法是,它正确地匹配没有前缀的电子邮件地址,但在前缀的情况下,它也匹配它们,除了第一个字母显然是唯一匹配负查找的字母。这是有道理的。

有没有一种方法可以让消极的背景应用于整个捕获组?还是应该用另一种表达方式来处理这个问题呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-30 05:29:24

在C#中的regex引擎中(在其他引擎中也是如此),允许非固定长度的查找,所以您只需要稍微修改regex,就可以更改查找后面的内容:

代码语言:javascript
复制
(?<!From: .*)

演示

票数 1
EN

Stack Overflow用户

发布于 2019-04-30 06:32:46

另一种选择是匹配您不想要的,并使用交替捕获您想要的

what you do not want|(what you do want)

你的模式看起来可能是:

代码语言:javascript
复制
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-.]+)

Regex演示

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55914113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档