Regex для соответствия любому файлу.config с несколькими исключениями
Я пытаюсь настроить регулярное выражение для использования в файле.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?
Это примеры путей, которые должны совпадать и игнорироваться:
- Web / smtp.config
- Библиотеки /Data/connectionStrings.config
Это примеры путей, которые НЕ должны совпадать и не должны игнорироваться
- _config/ постановка / smtp.config
- Web / web.config
- Web / web.release.config
- Web / Views / web.config
- Библиотеки /Data/app.config
- Библиотеки /Data/packages.config
- Данные / app.config
- Пакеты /MiniProfiler.EF6.3.0.11/ Библиотека /net40/MiniProfiler.EntityFramework6.dll.config
- Пакеты / repositories.config
1 ответ
Вы были очень близки Попробуйте это регулярное выражение на регулярном выражении101:
^(?!_?config|packages).*\/(?!(app|web|packages|repositories)\.)[^\/]*config$
Я немного упростил это, но главное изменение заключалось в том, чтобы не указывать косые черты в совпадении перед "конфигом".
Примечание: я использовал флаг без учета регистра, чтобы упростить само регулярное выражение.