需要一个正则表达式字符串才能使用自定义 Exchange DLP"敏感信息"类型。
即与史密斯匹配,但如果约翰史密斯或史密斯约翰不匹配
(?i)(?<!Johns)Smith
似乎为"约翰史密斯"工作,尽管我不相信它是100%有效的。
(?i)(Smith.*s(?!John))
似乎适用于"史密斯约翰",但如果后面跟着空格或换行符,则不行。
尝试了以下方法将它们组合成一个字符串,但似乎根本不起作用。
(?i)(?<!Johns)Smith |(?i)(Smith.*s(?!John))
(?i)(?<!Johns)Smith.*s(?!John)
我犯了什么小学生的错误?
(?i)(?<!Johns)Smith |(?i)(Smith.*s(?!John))
模式匹配前面没有John
+ 1 空格Smith
,或者匹配后跟任意数量的字符后跟不紧跟John
空格的Smith
。因此,它在很多位置上都与Smith
相匹配。
(?i)(?<!Johns)Smith.*s(?!John)
模式抓取一个前面没有立即带有John
+ 空格的Smith
,以及直到最后一个空格之前不紧跟John
的所有文本。
确保s
模式位于前瞻中:
(?i)(?<!Johns)Smith(?!s+John)
查看正则表达式演示
详
(?i)
- 不区分大小写的内联修饰符(?<!Johns)
- 前面没有Hohn
和空格字符的位置Smith
- 文本子字符串(?!s+John)
-Smith
子字符串不应紧跟 1+ 空格(或者如果您使用s*
,则为 0+ 空格(和子字符串John
。