使用正则表达式查找以/不包含某些类型的扩展名结尾的文件

时间:2017-10-30 12:51:11

标签: regex

我想使用正则表达式查找以某些类型的扩展名结尾的文件但是失败了。

让我们在下面考虑一些现有文件:

123.htm  
123.exe  
123.rmvb  
123.html  
123.HTM  
123.HTML  

我只想表达式返回:

  • 123.htm123.HTM(不返回123.html123.HTML
  • 仅限123.exe123.rmvb123.html123.HTML

首先,我尝试123\.(htm|HTM)$,请参阅Demo 1
对于第二个,我尝试123\.[^(htm|HTM)]$,请参阅Demo 2
但都失败了。

有人有想法吗?非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

第一个是正确的,你只是没有在regex101.com上正确测试模式(你需要使用m修饰符进行测试,使^匹配一行的开头$ 1}}匹配行的结尾。)

因此,对于第一个,123\.(htm|HTM)$123\.(?:htm|HTM)$/123\.htm$/i(?i)123\.htm$将根据您正在使用的正则表达式引擎执行。

第二个有点棘手:你不能在字符类中使用一系列字符,这些序列被匹配为单独的字符。要匹配不以特定htm子字符串结尾的字符串结尾,您可以使用任何两个pf:

(?i)123\.[^.]+$(?<!\.htm)

demo。或

(?i)123\.(?!htm$)[^.]+$

another regex demoi不区分大小写的修饰符对于lookbehind版本$(?<!\.htm)特别方便,其中一旦到达字符串结尾就执行检查。使用否定前瞻版本,在.之后匹配123后执行检查。