git 的跨平台正则表达式子字符串匹配

Cross platform regex substring match for git

很抱歉又问了一个模式匹配问题,但我正在努力寻找一种工具来在 git 挂钩中执行正则表达式。它需要在 Windows、Mac 和 Linux 上工作。

这个 gnu grep 适用于 Windows 和 Linux,但不适用于 Mac(因为 bsd)

echo "feature/EOPP-234-foo" | grep -Po -e '[A-Z]{4}-\d{1,5}'

这适用于 Mac 和 Linux,但不适用于 windows(因为 <git>\usr\bin\egrep 似乎不起作用)

echo "feature/EOPP-234-foo" | egrep -o '[A-Z]{4}-\d{1,5}'

sed 可能是最常用的工具,但如果我能找到匹配的东西就塞满了:

echo "feature/EOPP-234-foo" | sed -n 's/^.*\([A-Z]{4}\-\d{1,5}\).*$//p'

我什至试过 bash 匹配失败

[[ "feature/EOPP-234-foo" =~ ([A-Z]{4}-\d{1,5}) ]] && echo ${BASH_REMATCH[1]}

有什么想法吗?

当您需要在 Windows 上制作 POSIX 工具 运行 时,您需要记住在命令周围使用双引号,而不是单引号。

此外,您可以在所有这些环境中使用通用的 POSIX ERE 兼容正则表达式。这意味着 \d 必须替换为 [0-9][[:digit:]],因为 \d 是仅符合 PCRE 的构造。

您可以使用

grep -Eo "[A-Z]{4}-[0-9]{1,5}"
grep -Eo "[A-Z]{4}-[[:digit:]]{1,5}"