Регулярное выражение в bash / shell / python для githook pre-commit - PullRequest
0 голосов
/ 07 мая 2019

Я пытаюсь работать с регулярным выражением У меня есть строка в формате

[+/-] 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 это тоже нормально для меня.

Почему я это делаю?Я хочу сделать pre-commit hook, в таком формате.[+/-] Added Feature 305105:WWE-108. Added Dolph Ziggler super star.Это резон, почему я это делаю.

1 Ответ

1 голос
/ 09 мая 2019

Ответ из комментария.Собирая все вместе.

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

Но это длиннее и сложнеепонять.

...