BASH_REMATCH не выводит совпадение - PullRequest
0 голосов
/ 02 июля 2019

Контекст

Я пытаюсь использовать регулярное выражение для извлечения имени репозитория из ссылки клона 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 Ответ

1 голос
/ 02 июля 2019

Попробуйте re="([^/]*)\.git"; Это будет соответствовать заключительной части URL (все, что находится после последнего /), и захватит имя хранилища.

Обратите внимание, что вам нужно экранировать . перед git, иначе это будет соответствовать первому вхождению git в URL, так как . будет соответствовать 2-ой / из https://github

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...