首页 > 解决方案 > 匹配目录路径深度的正则表达式

问题描述

我正在尝试使用 bash 脚本匹配不同路径字符串的特定文件夹深度的正则表达式。

我想从packages例如以下两个级别匹配。/packages/[any-folder-name]/[any-folder-name]/.

因此,例如,/packages/frontend/react-app/src/index.ts我想匹配/packages/frontend/react-app/并将其存储在数组中

array=()
string="/packages/frontend/react-app/src/index.ts"

[[ $string =~ packages/.*/.*/ ]] && array+=(${BASH_REMATCH[0]}

几乎可以工作,但它会返回/packages/frontend/react-app/src/

我已经在这个问题上转了几个小时了。

任何帮助表示赞赏!

标签: regexbashshell

解决方案


大概是这样的:

#!/usr/bin/env bash

array=()
string="/packages/frontend/react-app/src/index.ts"

[[ $string =~ packages/([^/]+/){2} ]] && array+=("${BASH_REMATCH[0]}")

解释:

[^/]+匹配任何不包含/.


推荐阅读