我试图让正则表达式在.hgignore文件中使用,该文件将忽略调试期间生成的各种.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/
,这是我想要的和期望的,但看起来负面预测会改变(.*\/)
的匹配行为。
我不确定从哪里开始?我尝试匹配或不匹配的条件似乎并不复杂,但我对正则表达式的经验最少。也许在.hgignore中有一种更简单的方法来实现同样的目的?
这些是应匹配和忽略的路径示例:
这些是不应匹配且不可忽略的路径示例
答案 0 :(得分:2)
你真的很亲密。在regex101上试试这个正则表达式:
^(?!_?config|packages).*\/(?!(app|web|packages|repositories)\.)[^\/]*config$
我简化了一点,但主要的变化是在#34; config"之前在比赛中没有指定斜杠。
注意:我使用了一个不区分大小写的标志来简化正则表达式本身。