在.net正则表达式中无法匹配多个正向预测断言



我试图在O365中创建一个邮件流规则,该规则需要匹配来自Authentication-Results标头的特定元素。下面是一个编辑过的示例标题:

Authentication-Results: spf=pass (sender IP is 12.34.56.78) smtp.mailfrom=relayprovider.net; dkim=pass (signature was verified) header.d=replayprovider.net;dmarc=none action=none header.from=example.com;compauth=fail reason=001

我需要匹配规则时,所有这些特定的子字符串都存在:dkim=passspf=passheader.d=relayprovider.netheader.from=example.com

换句话说,当我们收到Example.com的批量邮件发送者(relayprovider.net)的电子邮件时,该电子邮件通过了dkim和spf检查。

O365邮件流规则只允许头上的单个条件,并且对于每个匹配条件只允许OR语句,我计划使用正则表达式来匹配头,只有在所有子字符串都存在时才使用正向向前看断言来匹配头。这是我的正则表达式:

(?=dkim=pass)(?=spf=pass)(?=header.from=example.com)(?=header.d=relayprovider.net)

当我尝试在一个据说是。net兼容的Regex测试器中对上面的示例头进行测试时,我没有得到匹配。如果我只使用一个断言,如(?=dkim=pass)(?=spf=pass),我得到一个匹配,但当我把它们组合起来时,它不匹配。

我做错了什么?

(?=dkim=pass)要求dkim=pass立即跟随先前的匹配。

你需要使用

^(?=.*dkim=pass)(?=.*spf=pass)(?=.*header.from=example.com)(?=.*header.d=relayprovider.net)

检查字符串内的任何地方。

还有,我已经躲过了你的点,以防万一。