我有一些数据,我只想从中提取卡的详细信息,即卡号、到期月/年和Cvv。我尝试了很多模式,但没有一个对它们都有效。如果一个匹配,那么另一个就不会。
测试数据:
4400634848591837Cvv: 362Expm: 04Expy: 20
4400634848591837:04 20 362
4400634848591837|04/24 362
4400634848591837 0420 362
Regex:
(d{16})[/s:|]*?(dd)[/s|]*?(d{2,4})[/s|-]*?(d{3})
这和其他人很匹配,但我还没想好如何匹配第一条线。我试过+-
展望&回头看,但这对我来说从来都不起作用。所以任何帮助都会很棒。
演示:此处为
第一行16位数字之后的部分有不同的格式,值的顺序也不同。
您可以使用具有3组的交替|
来获得Cvv部分的值。
请注意,您不必使用?
使字符类[/s|-]*?
不贪婪,因为字符不能与后面的数字交叉匹配。
b(d{16})(?:[/s:|]*(dd)[/s|]*(d{2,4})[/s|-]*(d{3})|Cvv:s*(d{3})Expm:s*(dd)Expy:s*(dd))b
b
防止部分匹配的字边界(d{16})(?:[/s:|]*(dd)[/s|]*(d{2,4})[/s|-]*(d{3})
最后3行的模式|
或Cvv:s*(d{3})Expm:s*(dd)Expy:s*(dd))
第一行的模式,匹配行中的文本,然后捕获3组中的数字b
A字边界
Regex演示