我想使用正则表达式查找以某些类型的扩展名结尾的文件但是失败了。
让我们在下面考虑一些现有文件:
123.htm
123.exe
123.rmvb
123.html
123.HTM
123.HTML
我只想表达式返回:
123.htm
和123.HTM
(不返回123.html
和123.HTML
)123.exe
,123.rmvb
,123.html
和123.HTML
首先,我尝试123\.(htm|HTM)$
,请参阅Demo 1
对于第二个,我尝试123\.[^(htm|HTM)]$
,请参阅Demo 2
但都失败了。
有人有想法吗?非常感谢您的帮助。
答案 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 demo。 i
不区分大小写的修饰符对于lookbehind版本$(?<!\.htm)
特别方便,其中一旦到达字符串结尾就执行检查。使用否定前瞻版本,在.
之后匹配123
后执行检查。