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

regex to exclude non golang files not working with inotifywait

以下是用于过滤掉所有非 go 文件(即扩展名为“.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

虽然它们似乎可以在 go 中正常工作,但不能与 inotifywait 的排除过滤器(使用 posix ERE 格式)一起使用

我正在尝试在我的 Makefile 中为一个 golang 项目设置一个 "watch and reload" 任务。另外我假设文件或文件夹名称没有空格。

知道问题了。似乎 [:graph:] 不是 \S 扩展 posix 中非 space 字符的 class 标识符。下面是好的。

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

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

您可以使用

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

demo

或者如果你可以分组:

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

demo

查看说明:

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