我正试图让一个正则表达式在.hgnore文件中使用,该文件将忽略调试期间生成的.config文件的各种副本。
正则表达式应匹配以.config
结尾的任何路径,只要路径不是以_config
、config
或packages
开头,并且文件名(紧跟在最后一个斜杠后面的字符)不是app
、web
、packages
或repositories
(或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"之前的匹配中不指定斜杠。
注意:我使用了一个不区分大小写的标志来简化正则表达式本身。