Regex可以匹配任何.config文件,但有一些例外



我正试图让一个正则表达式在.hgnore文件中使用,该文件将忽略调试期间生成的.config文件的各种副本。

正则表达式应匹配以.config结尾的任何路径,只要路径不是以_configconfigpackages开头,并且文件名(紧跟在最后一个斜杠后面的字符)不是appwebpackagesrepositories(或web.release、web.debug)

我最接近的是

^(?!(_config|[Cc]onfig|packages)).*/(?!([Aa]pp|[Ww]eb|packages|repositories).).*config$

这将正确地忽略Data/app.config,并且似乎适用于所有其他情况,但它将不正确地匹配Libraries/Data/app.config。当我在http://regex101.com/它向我表明.*/组仅通过Libraries/匹配,而不是像我预期的那样通过Libraries/Data/匹配。

我试着把它改成

^(?!(_config|[Cc]onfig|packages))(.*/)*(?!([Aa]pp|[Ww]eb|packages|repositories).).*config$

但是,组(.*/)*似乎与任何.config文件的整个路径相匹配。

如果我将最后一个负前瞻更改为类似的匹配组

^(?!(_config|[Cc]onfig|packages))(.*/)(([Aa]pp|[Ww]eb|packages|repositories).).*config$

然后(.*/)Libraries/Data/匹配,这正是我想要和期望的,但负面展望似乎改变了(.*/)的匹配行为。

我不知道从这里到哪里去?我试图匹配或不匹配的条件似乎没有那么复杂,但我不是最有经验的正则表达式。也许有一种更简单的方法可以在.hgnore中实现同样的事情?

以下是应该匹配并被忽略的路径示例:

  • Web/smtp.config
  • 库/数据/连接字符串配置

以下是不应匹配且不应忽略的路径示例

  • _config/stating/smtp.config
  • Web.config
  • Web.release.config
  • Web/Views/Web.config
  • 库/Data/app.config
  • Libraries/Data/packages.config
  • 数据/app.config
  • packages/MiniProfiler.E6.3.0.11/lib/net40/MiniProfiler.EntityFramework6.dll.config
  • 软件包/存储库.config

你真的很接近。在regex101:上尝试此regex

^(?!_?config|packages).*/(?!(app|web|packages|repositories).)[^/]*config$

我稍微简化了一下,但主要的变化是在"config"之前的匹配中不指定斜杠。

注意:我使用了一个不区分大小写的标志来简化正则表达式本身。

相关内容

  • 没有找到相关文章

最新更新