Bash脚本正则表达式问题

时间:2015-10-21 15:37:27

标签: regex bash

我已经获得了以下代码,并查看了许多示例,但无法弄清楚我做错了什么。我知道正则表达式有效(参见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

我很感激任何帮助!谢谢!

1 个答案:

答案 0 :(得分:1)

您应该使用[0-9]而不是\d,并且可以将替代字符类合并为单个类([D]|[U] = [DU]):

regex='ref:( |)([DU])([ES])([0-9]+)';

请参阅demo here

如果您没有使用捕获组,只需删除它们:

regex='ref: ?[DU][ES][0-9]+';

这是another demo。请注意,( |)可以缩短为( ?)( )?,这样可以减少回溯。