CircleCI配置Tags过滤正则表达式:标志使用及可行性咨询
我来帮你理清CircleCI里tags过滤器正则的相关疑问,结合它依赖的Java正则规范来逐一说明:
1. CircleCI正则是否支持像/g这样的标志?
CircleCI的正则确实遵循java.util.regex的规范,而Java的正则系统不支持在正则表达式末尾加/g、/i这类Perl风格的标志。这类匹配模式(比如全局匹配、大小写不敏感)在Java里是通过Pattern类的参数来指定的,不是直接写在正则字符串里的。
不过你不用纠结这个——CircleCI的tags匹配逻辑默认就是检查整个tag字符串是否完全匹配正则(相当于自动帮你加上了^和$的边界限制),不需要额外设置全局匹配的标志。
2. 怎么在正则里启用匹配模式?
如果需要大小写不敏感、多行模式这类功能,你可以用Java支持的嵌入式标志表达式,写在正则的开头:
- 大小写不敏感:
(?i)V\d+(能匹配v123和V123这类大小写混合的tag) - 多行模式:
(?m)^foo$(针对多行文本的边界匹配,不过tags一般是单行,用得较少)
3. 你写的/\d+/g正则可行吗?
完全不行。Java正则会把末尾的/g当成正则的一部分去匹配,相当于要找包含/\d+/g的tag,完全不符合你的需求。
至于你说之前的/\d+/无法匹配2位及以上数字,大概率不是正则的问题——\d+本身就会匹配1个或多个连续数字。可能的原因有:
- 你的tag里有非数字前缀/后缀(比如
v123或者123-beta),而CircleCI默认是全匹配,所以需要明确边界,改成/^\d+$/ - 配置文件里的正则转义或引号有问题(比如YAML里的特殊字符没处理好)
给你几个正确的配置示例:
- 匹配纯数字的tag(1位及以上):
workflows: foo: jobs: - bar: filters: tags: only: /^\d+$/
- 匹配带
v前缀的版本号(比如v123、v1.2.3):
workflows: foo: jobs: - bar: filters: tags: only: /^v\d+(\.\d+)*$/
额外提醒
CircleCI用的是Java的Pattern.matches()方法来做tags匹配,这个方法的特性就是要求整个输入字符串完全匹配正则表达式,所以你不用考虑全局匹配的场景——全局匹配是针对从字符串里多次提取匹配内容的情况,这里一次全匹配就够了。
内容的提问来源于stack exchange,提问作者Intrastellar Explorer
相关产品推荐
相关产品推荐

