正则表达式排除非 golang 文件不适用于 inotifywait
Posted
技术标签:
【中文标题】正则表达式排除非 golang 文件不适用于 inotifywait【英文标题】:regex to exclude non golang files not working with inotifywait 【发布时间】:2015-08-27 08:35:37 【问题描述】:以下是过滤掉所有非 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,$))
您可以在此处对其进行测试(点击正则表达式下方菜单中的“开始”尝试)
http://fiddle.re/80kvh6
http://fiddle.re/mhv1h6
虽然它们似乎在 go 中正常工作,但不适用于 inotifywait
的排除过滤器(使用 posix ERE 格式)
我正在尝试在我的 Makefile 中为 golang 项目设置“监视和重新加载”任务。另外我假设文件或文件夹名称没有空格。
【问题讨论】:
请尝试\.[^.][^o]$|\.[^g][^.]$|\.[^.][^.][^.]+$
。
@stribizhev:对不起,伙计。这不适用于所有没有或带有单个字符扩展名的名称,例如 main.a
或 main
。
我没有假设有 1 个符号扩展名,是的,但我在回答中添加了这一点。
【参考方案1】:
你可以使用
\.[^.][^.][^.]+$|\.[^.][^o]$|\.[^g][^.]$|\.[^.]$
见demo
或者如果你可以分组:
\.([^.][^.][^.]+|[^.][^o]|[^g][^.]|[^.])$
见demo
见说明:
\.
- 文字点
([^.][^.][^.]+|[^.][^o]|[^g][^.]|[^.])
- 一组备选方案:
[^.][^.][^.]+
- .
以外的 2 个字符和 .
以外的 1 个或多个字符...
[^.][^o]
- 点以外的字符和o
以外的字符...
[^g][^.]
- g
以外的字符和点以外的字符...
[^.]
- 点以外的字符...
$
- 在字符串结尾之前。
【讨论】:
【参考方案2】:有问题。似乎[:graph:]
不是\S
扩展posix 中非空格字符的类标识符。下面是不错的选择。
^[[:graph:]]*[^.][^g][^o]$|^[[:graph:]]1,2$|^[[:graph:]]*.[^g].$|^[[:graph:]]*..[^o]$|^[[:graph:]]*[^.]..$
甚至是来自 stribizhev 评论[^.][^g][^o]$|^..$|.[^g].$|..[^o]$|[^.]..$
的更好的评论
【讨论】:
你找到了一个可行的解决方案很好。请注意,分组是一个很好的正则表达式功能,它使正则表达式模式更具可读性并且更短。 是的..如果我这样做了,我什至不需要使用标识符。 +1以上是关于正则表达式排除非 golang 文件不适用于 inotifywait的主要内容,如果未能解决你的问题,请参考以下文章