正则表达式排除不使用inotifywait的非golang文件

时间:2015-08-27 08:35:37

标签: regex go inotify

以下是过滤掉所有非go文件的正则表达式(即扩展名为'。'的文件)

^([\S]*[^.][^g][^o]|[\S]*.[^g].|[\S]*..[^o]$|[\S]*[^.]..|[\S]{1,2})$

^([^.]*)($|[.]($|[\S]$|g[^o]$|[^g]o$|[^g][^o]$|([\S]+)\.($|.$|g[^o]$|[^g]o$|[^g][^o]$|[^.]{3,}$)|[^.]{3,}$))

你可以在这里测试它们(点击在正则表达式下面的菜单中试试'Go')

http://fiddle.re/80kvh6

http://fiddle.re/mhv1h6

虽然它们似乎可以正常使用但不能使用inotifywait的排除过滤器(使用posix ERE格式)

我正在尝试在我的Makefile中为golang项目设置“监视并重新加载”任务。另外我假设文件或文件夹名称没有空格。

2 个答案:

答案 0 :(得分:1)

遇到了问题。似乎[:graph:]不是\S扩展posix中非空格字符的类标识符。以下是好的。

^[[:graph:]]*[^.][^g][^o]$|^[[:graph:]]{1,2}$|^[[:graph:]]*.[^g].$|^[[:graph:]]*..[^o]$|^[[:graph:]]*[^.]..$

甚至更好的来自stribizhev评论[^.][^g][^o]$|^..$|.[^g].$|..[^o]$|[^.]..$

答案 1 :(得分:1)

您可以使用

\.[^.][^.][^.]+$|\.[^.][^o]$|\.[^g][^.]$|\.[^.]$

请参阅demo

或者如果你可以分组:

\.([^.][^.][^.]+|[^.][^o]|[^g][^.]|[^.])$

请参阅demo

见解释:

  • \. - 一个文字点
  • ([^.][^.][^.]+|[^.][^o]|[^g][^.]|[^.]) - 一组替代方案:
    • [^.][^.][^.]+ - .以外的2个字符以及.以外的1个或多个字符...
    • [^.][^o] - 除o以外的字符和字符以外的字符...
    • [^g][^.] - g以外的字符和点以外的字符...
    • [^.] - 一个点以外的角色......
  • $ - 就在字符串结尾之前。