简体   繁体   中英

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

I am trying to work with regular expression I have a string in format

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

Let's look on each part of string

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

What I tried to do Let's try to resolve each part:
1) echo '[+]' | egrep -o "[+/-]+" echo '[+]' | egrep -o "[+/-]+" . Yes, it works, but, it works also for [+/] , or [/] . and I see result without bracket quotes
2) echo "Resolved" | egrep -o "Added$|Resolved$|Closed$" echo "Resolved" | egrep -o "Added$|Resolved$|Closed$" . It works
3) echo '124214215215' | egrep -o "[0-9]+$" echo '124214215215' | egrep -o "[0-9]+$" . It works
4) echo "Feature" | egrep -o "Feature$|Bug$|Fix$" echo "Feature" | egrep -o "Feature$|Bug$|Fix$" . It works too
5) I have not found how
6) echo "WWE-108" | egrep -o "[a-zA-Z]+-[0-9]+" echo "WWE-108" | egrep -o "[a-zA-Z]+-[0-9]+" . It works too
7) I have not found how 8) Any text

The main question. How to concatenate, all these points via bash with spaces, according to this template. [+/-] Added Feature 305105:WWE-108. Added Dolph Ziggler super star [+/-] Added Feature 305105:WWE-108. Added Dolph Ziggler super star . I am not familiar with regexp, as for me, I'd like to do something like this:

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

But it is not ok. Can you please help me in a little bit with creation of regexp on bash. Also, python it is ok too for me.

Why I am doing this ? I want to make pre-commit hook, in format like this. [+/-] Added Feature 305105:WWE-108. Added Dolph Ziggler super star [+/-] Added Feature 305105:WWE-108. Added Dolph Ziggler super star . This is a reson, why I am doing this.

Answer from comment. Putting all together.

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

a general rule, with extended regex, meta characters .*+^$(|)[]{}\\ must be escaped with a backslash to have literal meaning (except in character sets between [] where rules are different).

Note, for culture, that with basic regex, it's the contrary, backslash was used to enable the specaial meaning of regex extensions (|){}+ .

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

But it's longer and harder to understand.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM