如何编写匹配*.c但排除*.in.c的正则表达式?
解决匹配.c后缀但排除.in.c文件的正则问题
我来帮你搞定这个正则问题!你需要的是匹配直接以.c结尾的文件,但排除那些以.in.c结尾的,核心就是要精准区分这两种后缀的差异。
推荐的正则表达式方案
这里有两种可靠的写法,你可以根据自己的需求选择:
- 负向后行断言写法
^.+?(?<!\.in)\.c$
^:匹配字符串开头.+?:匹配任意非空字符(非贪婪模式,避免不必要的过度匹配)(?<!\.in):负向后行断言,确保当前位置(也就是.c的点前面)的内容不是.in,直接排除.in.c的情况\.c$:匹配结尾的.c后缀
- 负向前瞻写法
^(?!.*\.in\.c$).+\.c$
^(?!.*\.in\.c$):负向前瞻,先检查整个字符串不会以.in.c结尾.+\.c$:再匹配任意非空字符结尾的.c文件
为什么你原来的写法没生效?
你提到负向预查没用,大概率是预查的位置或者范围没找准——比如如果预查没有锚定到字符串结尾,就没法精准排除.in.c这种后缀。上面的两种写法都是把排除逻辑和结尾的.c匹配绑定起来,确保只有真正的.c后缀才会被匹配。
测试验证
- ✅ 匹配的文件:
a.c、hello.c、etc.c、test123.c - ❌ 不匹配的文件:
a.in.c、hello.in.c、etc.in.c、file.txt
内容的提问来源于stack exchange,提问作者user6791424
相关产品推荐
相关产品推荐

