我已经获得了以下代码,并查看了许多示例,但无法弄清楚我做错了什么。我知道正则表达式有效(参见https://regex101.com/r/cB9hN1/1) - 只是不在我的bash脚本中。这是一个git更新钩子,但显然我做错了!这就是我所拥有的:
regex='ref:( |)([D]|[U])([E]|[S])(\d+)';
string="My commit ref: US2233556"
if [[ $string =~ $regex ]];
then
echo "[SUCCESS] Your message contains ref: for a Story or Defect."
exit 0
else
echo "[POLICY] Your message is not formatted correctly. Please include a \"ref: USXXXXX\" or \"ref: DEXXX\" in the commit message."
exit 1
fi
我很感激任何帮助!谢谢!
答案 0 :(得分:1)
您应该使用[0-9]
而不是\d
,并且可以将替代字符类合并为单个类([D]|[U]
= [DU]
):
regex='ref:( |)([DU])([ES])([0-9]+)';
请参阅demo here
如果您没有使用捕获组,只需删除它们:
regex='ref: ?[DU][ES][0-9]+';
这是another demo。请注意,( |)
可以缩短为( ?)
或( )?
,这样可以减少回溯。