【发布时间】:2017-03-21 00:59:00
【问题描述】:
我们正在为电子邮件做一些数据丢失防护,但问题是当人们多次回复电子邮件时,有时信用卡号或帐号会出现多次。
我们如何让 Java 正则表达式每个字符串只匹配一次。
例如,我们使用以下正则表达式来捕获匹配 2 个字母后跟 5 个或 6 个数字的帐号。在任何一种情况下,它也会省略 CR。
\b(?!CR)(?!cr)[A-Za-z]{2}[0-9]{5,6}\b
我们怎样才能找到它:
CX12345
CX14584
JB145888
JD748452
CX12345 (Ignore as its already found it above)
LM45855
【问题讨论】:
-
我宁愿建议匹配最后一次出现:
(?s)\b((?!CR|cr)[A-Za-z]{2}\d{5,6})\b(?!.*\b\1\b)。在 Java 中,不要忘记使用双反斜杠。 -
您好,感谢您的帮助。我曾尝试将此字符串添加到正则表达式测试器中,但它又回来了,它不喜欢它开头的 (?s)?另外,当我尝试从中删除 (?s) 时,它仍然会执行以前的操作。匹配多个相同的字符串。请问有什么想法吗?我用来测试的工具是使用 javascript 的 www.regextester.com。谢谢
-
为什么是“正则表达式测试器”?在 Java 代码中使用它。我已经在评论中在在线测试仪中提供了测试。在 Java 中,使用
String pattern = "(?s)\\b((?!CR|cr)[A-Za-z]{2}\\d{5,6})\\b(?!.*\\b\\1\\b)";。 Here is a Java demo. -
大家好,抱歉耽搁了。它似乎没有奏效。我认为这可能是我的错,我在原始问题中提到它是 java 脚本。我认为情况并非如此。我在一个名为 Mimecast 的控制台中使用它,我们将其用作外部邮件服务。他们要求我们在通过它的每封电子邮件中捕获一行正则表达式。我知道它可以使用基于 Java 的 Regex 查询和 Python。因此,由于我不是 Java 开发人员,因此我不太确定您对使用 Java 代码的意思。我希望这是有道理的。
标签: regex