Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 仅当已知前缀为';不在场_C#_Regex_Lookbehind - Fatal编程技术网

C# 仅当已知前缀为';不在场

C# 仅当已知前缀为';不在场,c#,regex,lookbehind,C#,Regex,Lookbehind,我正在编写一个正则表达式来匹配电子邮件地址,但前提是电子邮件前不存在某个前缀。(这似乎适用于负查找之后的任何非文字字符串匹配器。) 我尝试过使用负回溯,但只有在前缀存在时才成功地设法不匹配电子邮件地址的第一个字符 (?<!From: )([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+) 这应该与地址匹配 18.4.2019 9:35:02.115(22)->:From: address@subdomain.domain.tld RCP

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

我尝试过使用负回溯,但只有在前缀存在时才成功地设法不匹配电子邮件地址的第一个字符

(?<!From: )([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)
这应该与地址匹配

18.4.2019 9:35:02.115(22)->:From: address@subdomain.domain.tld
RCPT TO:<address@domain.tld>
RCPT至:
我尝试的正则表达式所做的是,它正确地匹配了没有前缀的电子邮件地址,但是在前缀的情况下,它也匹配了它们,除了第一个字母,它显然是唯一一个匹配否定查找的字母。这是有道理的

有没有一种方法可以将负面回顾应用于整个捕获组?或者应该使用另一种表达式来实现这一点?

在C#中的正则表达式引擎中(也在其他引擎中)允许使用非固定长度的lookbehind,因此您只需稍微修改正则表达式,改变lookbehind:

(?<!From: .*)
(?

另一个选项是匹配您不想要的内容,并使用:

你不想要的|(你想要的)

您的模式可以如下所示:

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-.]+)