我正在尝试解析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。
如有任何帮助,我将不胜感激
1条答案
按热度按时间vmdwslir1#
您可以使用
请参阅regex demo。
\b(?<!-)
-前面不紧跟-
的字边界(?<role_name>[a-z0-9]+(?:-[a-z0-9]+)*?)
-ID为1的组“角色名称”:一个或多个字母或数字,然后是-
的零个或多个序列以及一个或多个字母/数字,次数尽可能少(?:-([a-f0-9]{10}))?
-与-
匹配的可选非捕获组,然后将10个十六进制字符捕获到组2中-
-连字符([a-z0-9]+)
-组3:一个或多个字母或数字\b(?!-)
-不紧跟-
的字边界。