Я пытаюсь заставить работать регулярное выражение для использования в файле .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?
Это примеры путей, которые должны совпадать и игнорироваться:
- Веб/smtp.config
- Библиотеки/Данные/connectionStrings.config
Это примеры путей, которые НЕ должны совпадать и не должны игнорироваться.
- _config/staging/smtp.config
- Веб/веб.config
- Web/web.release.config
- Интернет/представления/web.config
- Библиотеки/Данные/app.config
- Библиотеки/Данные/packages.config
- Данные/app.config
- пакеты/MiniProfiler.EF6.3.0.11/lib/net40/MiniProfiler.EntityFramework6.dll.config
- пакеты/repositories.config