BASH_REMATCH未输出匹配项

时间:2019-07-02 08:13:05

标签: linux bash shell

上下文

我正在尝试使用正则表达式从github https克隆链接中提取存储库名称,而我似乎无法使BASH_REMATCH正常工作。

对于上下文,我将其编写为.sh文件并在Git Bash中运行。

代码逻辑

正如您将在下面看到的,我基本上提供了一个克隆https链接,并且还提供了正则表达式模式。我在https://regex101.com/上进行了尝试,正则表达式正确地提取了字符串的最后一部分:

  

/liam_test_3.git

使用它还可以提取仅存储库名称的特定捕获组:

  

liam_test_3

但是我下面尝试测试的代码默认为“ else”语句,并输出“ no match”。

代码

#!/bin/bash

# $1 = SSH Clone Link
# $2 = Github Organisation


CLONE="https://github.cloud.companyname.com/Organisation/liam_test_3.git";
re="\/(?!.*\/)(.*).git";

echo "$CLONE"
echo "$re"

if [[ $CLONE =~ $re ]]
then 
    repo_dir=${BASH_REMATCH[1]}
    echo "Your repo name is $repo_dir"
else
    echo "No Match"
fi;

1 个答案:

答案 0 :(得分:1)

尝试re="([^/]*)\.git";,它将匹配url的最后一部分(最后一个/之后的所有内容),并捕获存储库名称。

请注意,您需要在git之前转义,否则将与URL中第一次出现的 git 匹配,即将与 https://github

中的第二个 / 相匹配