bash/shell/python 上用于 githook 预提交的正则表达式

Regular expression on bash/shell/python for githook pre-commit

我正在尝试使用正则表达式 我有一个格式为

的字符串
[+/-] Added Feature 305105:WWE-108. Added Dolph Ziggler super star

让我们看看字符串的每个部分

1) [+/-] – bracket quotes are important. it can [+] or [-]. or [+/-]. not "+", or "-", or "+/-" without bracket quotes
2) Added – it can be "Added", "Resolved", "Closed"
3) 305105 – any numbers
4) Feature – it can be "Feaute", "Bug", "Fix"
5) : – very imporant delimiter
6) WWE-108 – any text with delimiter "–" and with numbers after delimiter
7) . – very imporant delimiter
8) Added Dolph Ziggler super star – any text

我试图做什么 让我们尝试解决每个部分:
1) echo '[+]' | egrep -o "[+/-]+"。是的,它有效,但是,它也适用于 [+/][/]。我看到没有括号引号的结果
2) echo "Resolved" | egrep -o "Added$|Resolved$|Closed$"。有效
3) echo '124214215215' | egrep -o "[0-9]+$"。有效
4) echo "Feature" | egrep -o "Feature$|Bug$|Fix$"。它也有效
5) 我还没有找到如何
6) echo "WWE-108" | egrep -o "[a-zA-Z]+-[0-9]+"。它也有效
7)我还没有找到如何 8) 任何文字

主要问题。根据此模板,如何通过 bash 与空格连接所有这些点。 [+/-] Added Feature 305105:WWE-108. Added Dolph Ziggler super star。我不熟悉正则表达式,至于我,我想做这样的事情:

string="[+/-] Added Feature 305105:WWE-108. Added Dolph Ziggler super star"
first=$(echo $string | awk '{print }')

if [[ $first == "[+]" ]]; then
echo "ok"
echo $first
elif [[ $first == "[*]" ]]; then
echo "ok2"
echo $first
elif [[ $first == "[+/-]" ]]; then
echo "ok3"
echo "$first"
else
echo "not ok"
echo $first
exit 1
fi

但是不行。你能帮我在 bash 上创建正则表达式吗?还有,python我也可以。

我为什么要这样做?我想以这样的格式制作预提交挂钩。 [+/-] Added Feature 305105:WWE-108. Added Dolph Ziggler super star。这是一个共鸣,我为什么要这样做。

来自评论的回答。全部放在一起。

egrep '^\[(\+|-|\+/-)\] (Added|Resolved|Closed) (Feature|Bug|Fix) [0-9]+:[a-zA-Z]+-[0-9]+\..+'

一般规则,使用扩展的正则表达式,元字符 .*+^$(|)[]{}\ 必须用反斜杠转义才能具有字面意义(除了 [] 之间的字符集,其中规则不同)。

请注意,对于文化,与基本正则表达式相反,反斜杠用于启用正则表达式扩展的特殊含义 (|){}+

grep '^\[\(+\|-\|+/-\)\] \(Added\|Resolved\|Closed\) \(Feature\|Bug\|Fix\) [0-9]\+:[a-zA-Z]\+-[0-9]\+\..\+'

但是它更长更难理解。