我已经看了很多关于这个的帖子,但我仍然遇到问题。
我正在尝试编写一个正则表达式查询,该查询查找不遵循我们想要的命名方案的S3存储桶的名称。我们想要的方案如下:
测试铲斗日志** - 我们 - 东 - 1 **
粗体部分是可选。意思是,以下两个是有效的存储桶名称:
现在,我想做的是否定这个。所以我想抓住所有不遵循上述方案的桶。我已经成功地形成了一个匹配命名方案的查询,但是我遇到的问题是形成一个否定它的问题。正则表达式如下:
^(.*-bucket-logs)(-[a-z]{2}-[a-z]{4,}-\d)?$
一些更有效的存储桶名称:
无效的存储桶名称(我们希望与之匹配):
感谢您的帮助。
答案 0 :(得分:2)
正如Barmar先生所说,在这些情况下,最好的方法可能是以编程方式解决它。您可以编写通常的正则表达式来匹配正确的模式,并将它们从集合中排除。
但你可以试试这个:
^(?:.(?!-bucket-logs-[a-z]{2}-[a-z]{4,}-\d|-bucket-logs$))*$
这是使用负lookeahead(?!)的典型解决方案,该负lookeahead是非捕获组,具有零长度。基本上它表明你希望每一行以某些东西开头但后面没有模式。
<强> EDITED 强>
正如易卜拉欣指出的那样(谢谢!),我的第一个正则表达式存在一些问题。我修好了,我觉得现在还可以。我忘了将内部正则表达式的最后一部分设置为可选(?)。