【发布时间】:2013-09-11 03:19:36
【问题描述】:
更笼统地表达这个问题:我如何编写一个匹配模式的正则表达式,除非它出现在另一个模式中的某个地方?
我有一个正则表达式(见下文),它匹配特定的信用卡号码,在数字组之间有或没有破折号/空格。
如果信用卡号出现在 UUID 字符串中(格式为“XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX”,其中 X 是任何十六进制数字),我想防止匹配从任意位置开始。
只有当 CC num 从 UUID 中的位置 1 开始时,负前瞻才有效,常规捕获组也是如此,所以我希望其他人有替代策略。
Visa 卡号的示例正则表达式组:
(4\d{3}(?:[\s_\-\n\r\.]*\d{4}){3})
应该不匹配的示例字符串:
uuid1="836ac40c-e6ed-4026-2222-44443333f465" uuid2="46120710-5880-4000-8060-f0fadf056136"
应该匹配的示例字符串:
4026-2222-44443333
46120710-5880-4000
4111222233334444
4999-8888-7777-6666
由于处理信用卡号码的 PCI 合规性规则,我们试图严格检测任何字符串中的数字,除非该字符串被确定为安全(例如 UUID)。
使用的正则表达式引擎支持环视和反向引用,但不支持条件。
【问题讨论】:
-
您使用的语言或工具?你请一些应该匹配的输入和一些不应该匹配的输入?
标签: regex credit-card