正则表达式匹配任何.config文件,但有一些例外

时间:2014-11-11 18:08:40

标签: regex regex-negation regex-greedy hgignore

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

只要路径不以.config_configconfig开头并且只要文件名,正则表达式就应匹配以packages结尾的任何路径(紧跟在最后一个斜杠后面的字符)不是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/,这是我想要的和期望的,但看起来负面预测会改变(.*\/)的匹配行为。

我不确定从哪里开始?我尝试匹配或不匹配的条件似乎并不复杂,但我对正则表达式的经验最少。也许在.hgignore中有一种更简单的方法来实现同样的目的?

这些是应匹配和忽略的路径示例:

  • 网络/ smtp.config
  • 库/数据/ connectionStrings.config

这些是不应匹配且不可忽略的路径示例

  • _config /分段/ smtp.config
  • 网络/ web.config中
  • 网络/ web.release.config
  • 网页/浏览次数/ web.config中
  • 库/数据/ app.config中
  • 库/数据/ packages.config
  • 数据/ app.config中
  • 包/ MiniProfiler.EF6.3.0.11 / LIB / net40 / MiniProfiler.EntityFramework6.dll.config
  • 包/ repositories.config

1 个答案:

答案 0 :(得分:2)

你真的很亲密。在regex101上试试这个正则表达式:

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

我简化了一点,但主要的变化是在#34; config"之前在比赛中没有指定斜杠。

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