正则表达式排除非 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.amain 我没有假设有 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的主要内容,如果未能解决你的问题,请参考以下文章

使用正则表达式元素数组的 MongoDB 查询 $in

使用正则表达式元素数组的 MongoDB 查询 $in

Golang: 如何使用正则表达式,并实战爬取手机号

Python 正则表达式不适用于 Gmail 正文

swift中的正则表达式不适用于此示例?

ASP.NET MVC 正则表达式属性不适用于括号(文字)