【发布时间】:2019-04-30 04:45:52
【问题描述】:
我正在编写一个正则表达式来匹配电子邮件地址,但前提是电子邮件之前不存在某个前缀。 (这似乎适用于任何非文字字符串匹配器后负回溯。)
我尝试过使用否定的lookbehind,但如果存在前缀,则只能成功地设法不匹配电子邮件地址的第一个字符。
(?<!From: )([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)
首先,不要介意电子邮件地址匹配器,它很粗糙,但在我的用例中有效,而且这个问题可以适用于任何非文字字符串匹配器,用文字替换捕获组可以按预期工作。
我希望它匹配的是电子邮件地址,如果前缀 "From: " 不在它前面。
这不应与地址匹配
18.4.2019 9:35:02.115(22)->:From: address@subdomain.domain.tld
这应该与地址匹配
RCPT TO:<address@domain.tld>
我尝试的正则表达式的作用是,它正确匹配没有前缀的电子邮件地址,但在前缀的情况下,它也匹配它们,除了第一个字母显然是唯一匹配否定后向的字母。确实有道理。
有没有办法让消极的后视应用到整个捕获组?还是应该用不同的表达方式来解决这个问题?
【问题讨论】:
标签: c# regex lookbehind