正则表达式唯一匹配只有多行

时间:2017-03-30 09:22:25

标签: java regex pcre

正如标题所示,我试图为DLP要求编写一些正则表达式。在英国,所有标准数字格式似乎都在窗外,我们的数字看起来如下所示:

01111 111111
01111111111
020 2222 2222
020 22222222
0800 111 1111
0800 1111111

当您将国际符号添加到此时,您最终会得到这两个符号 每个0044或+44,它变得非常凌乱。我已经写了一些正则表达式,它给了我大多数这些定义的命中,这一点很好。但是,当我使用像regexr.com这样的网站进行测试时,我遇到的问题是,我希望能够在整个扫描文档中获得独特的结果。

我的目的是在我们的电子邮件平台中使用此DLP来扫描文档和电子邮件内容。我将其设置为在x次匹配后保留电子邮件但当前如果它在新行上,那么即使我指定了多行(也许我误解了多行的工作方式),它就是匹配。

这是我目前的正则表达式:

/(\+[0-9]{7,12}|\b[0-9]{7,12}|[0-9]{3,5} [0-9]{5,9}|\+[0-9]{3,6} [0-9]{5,9}|\+[0-9]{1,4} [0-9]{3,6} [0-9]{4,9}|\+[0-9]{1,4} [0-9]{6,13})(?!.*\1)/gm

我试图用这个只给我每个例子的最后一次尝试,以确保这些是唯一的匹配,我的要求是人们有电子邮件签名,有些有电话,传真和移动数字,这意味着链中的每封电子邮件可能是三个数字。在几封电子邮件中,我们已经触发了DLP规则,而且我们会不必要地收到电子邮件。

希望我已经明确了解我想要实现的目标,而且我不觉得我在这里的要求太过分了。任何正则表达的大师都可以指出我出错的地方吗?

Mimecast是我的处理引擎,支持java / perl正则表达式。

我想要匹配的示例电子邮件是:

Data Leak Email
01111 111111
01111 111112
01111 111113
01111 111114
01111 111115
01111 111116
01111 111117
01111 111118
01111 111119
01111 111110

但我不想标记的电子邮件是:

Hi,
Text
Signature 01111 111111
Hi, Text Signature 01111 111111
Hi, Text Signature 01111 111112
Hi, Text Signature 01111 111111
Hi, Text Signature 01111 111112
Hi, Text Signature 01111 111111
Hi, Text Signature 01111 111112
Hi, Text Signature 01111 111111
Hi, Text Signature 01111 111112
Hi, Text Signature 01111 111111

由于顶部的示例中包含多个唯一编号,因此突出显示联系人数据库泄漏的可能性很高。最下面的一个是两个人之间的电子邮件对话,具有重新编号,所以虽然是数字会标记,但它们只会被计算一次。因此,如果我有足够的数字来触发规则为10,那么它们在底部电子邮件中只有8短,但足以触发顶部电子邮件。

谢谢,

0 个答案:

没有答案