测试人社区

linux三剑客+正则表达式使用问题,如何匹配“除了某字符串且同时符合某规范 ”

需求:

一:* /topics/16689/replies/124751/edit 把数字替换为 /topics/int/replies/int/edit
二:* /_img/uploads/photo/2018/c54755ee-6bfd-489a-8a39-81a1d7551cbd.png!large 变成 /_img/uploads/photo/2018/id.png!large

实现数字替换int,但是同时2018这种年份就不需要替换

问题:
1.如何使用正则表达式匹配“排除某字符串且符合某字符串规范”
2.如何使用三剑客实现

实践:
1.正则表达式“排除某字符串”:
(^ab)这种形式是排除a且b,并不是排除“ab”,非常不实用
^(?!.ab).$这种形式实现不匹配含有ab的行,但是无法实现匹配不含有ab且符合“只包含数字规范”
2.使用三剑客:
grep -v可以实现排除匹配到的规范功能,但是排除了含有2018的/_img/…后,我就无法实现需求二了,且没有发现三剑客有并集的操作实现

linux三剑客+正则表达式使用问题,如何匹配“除了某字符串且同时符合某规范”

seveniruby:~ seveniruby$ echo ' /_img/uploads/photo/2018/c54755ee-6bfd-489a-8a39-81a1d7551cbd.png!large' | sed -E -e  's#(/[0-9]{4}/)[a-z0-9\-]*#\1_id_#'
 /_img/uploads/photo/2018/_id_.png!large

抱歉,是我表述不清楚了,有年份的链接除了/_img/upload…样式还有很多样式,我不想把全部样式都列出来,想找比较通用的方法,下面是一部分截图

你看到的那些年份,其实是用户名,只是用户的个人标记,并不是真的年份含义,所以你可以这样去解析。把所有的用户名都统一聚类。