GitHub GraphQL refs的query参数语法文档及正则匹配咨询
GitHub GraphQL API refs查询参数语法说明
GitHub GraphQL API中refs的query参数使用的是GitHub代码搜索语法的子集,并非标准正则表达式。目前官方文档未针对该参数提供完整语法说明,但可结合代码搜索匹配规则与实际测试,总结出可用的语法规则:
可用匹配规则
- 起始锚点:用
^匹配字符串开头,比如^v可筛选所有以v开头的refs - 结束锚点:用
$匹配字符串结尾,比如\.0$可筛选以.0结尾的refs - 字符范围:支持
[0-9]匹配数字、[a-z]匹配小写字母这类范围表达式 - 通配符:
*匹配任意长度的任意字符(含空字符),?匹配单个任意字符 - 重复次数限制:暂不支持
+、*这类正则重复量词,需用通配符间接实现,比如v[0-9]*\.[0-9]*可覆盖v1、v1.2、v1.2.3这类格式的标签
针对你的需求的查询方案
要匹配符合^v\d+(\.\d+)+$的语义化版本号标签(如v1.0、v2.3.4),可尝试以下查询字符串:
^v[0-9]*\.[0-9]+(\.[0-9]+)*$
若API端匹配效果达不到预期,更可靠的方式是先获取所有以v开头的refs(用query:"^v"),再在客户端用标准正则^v\d+(\.\d+)+$做二次过滤。
修改后的GraphQL查询示例
query($owner:String!,$name:String!,$cursor:String){ repository(owner:$owner,name:$name){ refs(after:$cursor,first:100, orderBy:{field:TAG_COMMIT_DATE,direction:DESC}, refPrefix:"refs/tags/", query:"^v[0-9]*\\.[0-9]+(\\.[0-9]+)*$"){ nodes{name,target{...on Commit{committedDate},...on Tag{tagger{date}}}} pageInfo{hasNextPage,endCursor} } } }
注意:字符串中的反斜杠需要转义,因此写成\\.和\\[。
内容的提问来源于stack exchange,提问作者Jeff G
相关产品推荐
相关产品推荐

