用于匹配具有前缀的目录的正则表达式模式

时间:2015-11-10 01:48:38

标签: regex git pre-commit-hook

我是一个正则表达式的新手,我无法弄清楚如何设置这个模式的正则表达式我想做。

表达式意味着在Python预提交脚本中,如果提交的文件与之匹配,它将运行预提交钩子。

我的文件示例列表

vars/prod-region1/mysql.yml
vars/prod-region1/keys.yml
vars/prod-region1/test.yml
vars/stage-region2/mysql.yml
vars/stage-region2/keys.yml
vars/stage-region2/test.yml
vars/local/mysql.yml
vars/local/test.yml

我需要一个正则表达式模式,它将匹配属于以下目录模式的文件

  • 乏/ PROD * / mysql.yml
  • 乏/ PROD * / keys.yml
  • 乏/阶段* / mysql.yml
  • 乏/阶段* / keys.yml

我目前的努力是

vars/(prod*|stage*)/(mysql|keys).yml

这是非常错误的。任何帮助都会很棒。

1 个答案:

答案 0 :(得分:4)

您错误地使用了*。它是一个重复指示符,而不是多字符通配符;正则表达式语法中没有通用(可变长度)通配符。但是,有单字符通配符和准通配符。因此,例如,.*匹配任何字符,零次或多次。 \S*匹配零个或多个非空白字符。但是,在您的示例中,d*连续匹配零个或多个d。与e*类似。

您需要使用某些内容来匹配其他字符。在这种情况下,您需要零个或多个非空白字符,因此您应该使用\S*。您还应该转义/个字符。当你的意思是文字.而不是通配符时,你也需要转义.。:

vars\/(prod\S*|stage\S*)\/(mysql|keys)\.yml

Here's a demo