regex 用于从Kubernetes单元名称解析部署或作业名称的正则表达式

q3qa4bjr  于 2022-11-18  发布在  Kubernetes
关注(0)|答案(1)|浏览(107)

我正在尝试解析Kubernetes Pod名称以进行日志记录。
我的pod名称总是这样

<deployment>-<replicaset>-<uid>
<job>-<uid> <-- if created by a job

以下是一些示例

events-worker-7c9b7bdc55-f7sgc
notification-585f6b94b8-t4jjc
report-generator-749ccf648d-gd9j7
static-content-8445d7f556-wbxvp
init-database-fm44h <-- if created by a job

我尝试获取的是 〈deployment/job〉 部分。

events-worker
notification
report-generator
static-content
init-database

我从这样的东西开始

(?<role_name>.*)(?:-[a-z0-9]{8,10})(?:-[a-z0-9]+)

最后是这样的

(?:(?<role_name>[a-z0-9]+(?:-[a-z0-9]+)*))-(?<=-)[a-z0-9]+-(?:(?<=-)[a-z0-9]+)

但我无法同时匹配这两种情况(当名称有副本集时,如果名称没有副本集)
它要么根本不匹配 *init-database-fm 44 h *,要么只捕获 init 而不是 init-database
如有任何帮助,我将不胜感激

vmdwslir

vmdwslir1#

您可以使用

\b(?<!-)(?<role_name>[a-z0-9]+(?:-[a-z0-9]+)*?)(?:-([a-f0-9]{10}))?-([a-z0-9]+)\b(?!-)

请参阅regex demo

  • 详细数据 *:
  • \b(?<!-)-前面不紧跟-的字边界
  • (?<role_name>[a-z0-9]+(?:-[a-z0-9]+)*?)-ID为1的组“角色名称”:一个或多个字母或数字,然后是-的零个或多个序列以及一个或多个字母/数字,次数尽可能少
  • (?:-([a-f0-9]{10}))?-与-匹配的可选非捕获组,然后将10个十六进制字符捕获到组2中
  • --连字符
  • ([a-z0-9]+)-组3:一个或多个字母或数字
  • \b(?!-)-不紧跟-的字边界。

相关问题