正则表达式-遵循规则的所有内容

时间:2018-07-31 11:48:59

标签: regex sed

我有一个看起来像这样的列表

imagetest-14f66c4664-d8ngk
image-net-kxpxc
image-deploy-787d65b646-6bhtn

我想构建一个正则表达式,该表达式匹配任何跟在后面的String

  • 一个-后跟5个字符或
  • 一个-,然后是8到10个字符,然后是-和5个字符

正则表达式应匹配所有:

imagetest-14f66c4664-d8ngk
image-net-kxpxc
image-deploy-787d65b646-6bhtn
waeve-net-xgw8m

会有一个简单的方法吗?

2 个答案:

答案 0 :(得分:0)

看起来像(请参阅https://regexr.com/3t88e

-([0-9a-f]+-)?([a-z0-9]{5})$

将匹配。

基本上:

  • 破折号
  • 可选的十六进制组,后跟破折号(([0-9a-f]+-)?
  • 一组由5个字符组成的字母数字(([a-z0-9]{5}))标识符,
  • 锚定到字符串($)的末尾

(但是请注意,这也将与image-hello匹配,因为hello可能会误认为是5个字符的标识符。)

EDIT :要匹配整个字符串,请扩展为

^image(?:test|-net|-deploy)-([0-9a-f]+-)?([a-z0-9]{5})$

所以是文字“图像”,后跟test-net-deploy,然后是上面描述的内容。

答案 1 :(得分:0)

这是怎么回事:^(image(?:test|-net|-deploy))-(.+)$

  • ^锚定到行的开头
  • (...)围绕一个匹配组
  • (?:...)围绕着一个不匹配的人群
  • |提供了允许多个选项之一的“
  • .+与任何字符(.)匹配一次或多次(+
  • $锚定到行的末尾

这导致以下几组:

imagetest      14f66c4664-d8ngk
image-net      kxpxc
image-deploy   787d65b646-6bhtn

在Regex101上玩过-解释也很好:https://regex101.com/r/0CphvX/3