首页 > 解决方案 > 使用正则表达式提取 docker-compose 文件卷

问题描述

我正在尝试使用正则表达式提取 docker-compose 文件的所有容器的绑定挂载/卷。

我为此目的制作的模式是:

/volumes:\n(?:^[ \n]+- ?(\S+))/gm

正则表达式演示

但它只选择每个容器的第一个卷/绑定挂载。

我怎样才能选择所有 volumes列表项?

标签: regexbashdocker-compose

解决方案


您可以匹配 volumes: 和一个换行符,然后匹配所有以 1 个或多个空格开头的行,然后 -

\bvolumes:\r?\n((?:[^\S\r\n]+- .*(?:\r?\n|$))*)
  • \bvolumes:\r?\n
  • (捕获组 1
    • (?:非捕获组
      • [^\S\r\n]+匹配 1+ 个空格,换行符除外
      • - .*(?:\r?\n|$)匹配- 后跟字符串的其余部分
    • )*关闭非捕获组并重复 0+ 次
  • )关闭组 1

正则表达式演示

如果卷必须位于行首,则可以在其前面加上可选空格。

^[^\S\r\n]*volumes:\r?\n((?:[^\S\r\n]+- .*(?:\r?\n|$))*)

正则表达式演示


推荐阅读