开发者社区 问答 正文

BASH_REMATCH未输出匹配项

语境 我正在尝试使用正则表达式从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;

展开
收起
祖安文状元 2020-01-06 16:27:36 553 分享 版权
1 条回答
写回答
取消 提交回答
  • 尝试使用re="([^/]*).git";此方法将匹配url的最后部分(最后一个/之后的所有内容),并捕获存储库名称。

    请注意,您需要转义。在git之前,否则将与url中第一次出现的git相匹配,例如。将匹配第二个/的https://开头的github

    2020-01-06 16:27:42
    赞同 展开评论