【问题标题】:Regular expression on bash/shell/python for githook pre-commit用于 git hook 预提交的 bash/shell/python 中的正则表达式
【发布时间】:2019-09-25 03:19:10
【问题描述】:

我正在尝试使用正则表达式 我有一个格式的字符串

[+/-] 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 $1}')

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]+\..+' 怎么样,使用扩展正则表达式的一般规则被认为是元字符 .*+^$(|)[]{} 必须用反斜杠转义以具有字面意义(除了在 [] 之间的字符集,其中规则是不同)
  • @NahuelFouilleul 谢谢。作品
  • 很高兴知道,评论已改为回答

标签: regex bash shell githooks


【解决方案1】:

从评论中回答。将所有内容放在一起。

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]\+\..\+'

但它更长更难理解。

【讨论】:

    猜你喜欢
    • 2015-06-30
    • 2021-10-15
    • 2014-10-11
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    相关资源
    最近更新 更多