我是正则表达式的新手。我希望找到不包含A的行,然后包含B,然后屏蔽B。
我的目标是日志文件中的信用卡号码,匹配行不包含“xxx”。
信用卡模式 16位数字以3,4,5或6开头,分别为“ - ”,空格或空格,限制为空格,“,”,“'”或“”“如下所示。
3214745869874125/3214 7458 6987 4125 / 3214-7458-6987-4125
4214745869874125/4214 7458 6987 4125 / 4214-7458-6987-4125
5214745869874125/5214 7458 6987 4125 / 5214-7458-6987-4125
6214745869874125/6214 7458 6987 4125 / 6214-7458-6987-4125
3214745869874125 /“3214745869874125”/'3214745869874125'/,3214745869874125,
我写了一些东西来寻找卡号和掩码。这有效,但我需要匹配不包含“xxx”的行 这可以转换
for(int i=0;i<2000;++i)
System.gc();
到这个
321474 ****** 4125/3214 74 ** **** 4125 / 3214-74 ** - **** - 4125
421474 ****** 4125/4214 74 ** **** 4125 / 4214-74 ** - **** - 4125
521474 ****** 4125/5214 74 ** **** 4125 / 5214-74 ** - **** - 4125
621474 ****** 4125/6214 74 ** **** 4125 / 6214-74 ** - **** - 4125
321474 ****** 4125 /“321474 ****** 4125”/'321474 ****** 4125'/,321474 ****** 4125,
我看着\&amp;但无法利用它。我试过这个,
%s/\([ ,'"][3456]\d\{3}[- ]\?\d\{2}\)\d\{2}\([- ]\?\)\d\{4}\([- ]\?\d\{4}[ ,'"]\)/\1**\2****\3/gc
此,
%s/\(101011\)\&\([ ,'”][3456]\d\{3}[- ]\?\d\{2}\)\d\{2}\([- ]\?\)\d\{4}\([- ]\?\d\{4}[ ,'”]\)/\1**\2****\3/gc
这个,
%s/101011\&\([ ,'”][3456]\d\{3}[- ]\?\d\{2}\)\d\{2}\([- ]\?\)\d\{4}\([- ]\?\d\{4}[ ,'”]\)/\1**\2****\3/gc
解决
我这样解决了,
%s/\(.*101011\)\&\([ ,'"][3456]\d\{3}[- ]\?\d\{2}\)\d\{2}\([- ]\?\)\d\{4}\([- ]\?\d\{4}[ ,'"]\)/\1**\2****\3/gc
答案 0 :(得分:1)
你的问题不明确。您可能已经解决了几个小时的问题,但您应该考虑到这里的人正在阅读您的问题,不知道什么是要求,什么是信用卡模式等。
你应该清楚自己。即使你在评论中加上一个例子,也不清楚。无论如何,对于你的例子,下面的行有效。
关键是,您可以使用\zs \ze
来设置替换的边框。
%s/\v.*"\d{4}[- ]\zs\d{4}([- ])\d\d\ze\d\d[- ]\d{4}".*/****\1**/
这一行改变:
aaa, "4125 2636 4785 1231"
到
aaa, "4125 **** **85 1231"
分隔符可以是SPACE or -
答案 1 :(得分:1)
最新的Vim包括logipat plugin。所以你可以使用命令
Novacode-dox
搜索与模式A不匹配的行和匹配模式B