不使用lookbehind的文件名的正则表达式

时间:2014-11-10 22:41:36

标签: regex macos find file-extension

我正在尝试匹配所有未在jpg / png / jpeg / gif中结束且尚未启动文件名的文件使用.

我正在将此正则表达式传递给find,如此:

find -E path/to/dir myregex

这是正则表达式

^.*\/[^\.].*\.(?!jpeg$)(?!jpg$)(?!gif$)(?!png$)([^jgp]..|j[^p].|g[^i].|p[^n].|jp[^g]|gi[^f]|pn[^g]|jpg.+|png.+|gif.+|jpe[^g]|jpeg.+)[^\.]*$

它似乎确实有效,但是人类很长......一种可能性就是编写一个函数来生成它...但我希望有一种更简单的方法。

我不认为我使用的find版本(OS X Mavericks)支持lookbehind,但即使它确实如此,我也想知道是否有替代方案。

以下是互动版:http://regex101.com/r/xD9qC2/1

1 个答案:

答案 0 :(得分:1)

对不起这里的自我问答。在发布我的问题之前,我花了一些时间思考这个问题,但在发布后我才有了一些见解。

这有点长,但它不像问题那样强硬。

(?:^.{1,3}$)|(?:^(?!\.(?:jpg|gif|png)$).{4}$)|(?:^.*(?!.*\.(?:jpg|gif|png|jpeg)$).{5}$)

Interactive link