Regex на Shell Script - PullRequest
       107

Regex на Shell Script

0 голосов
/ 23 октября 2018

У меня есть это регулярное выражение, которое отлично работает с моими желаемыми шаблонами соответствия на https://regex101.com/ (Python).Проблема в том, что мне нужно интегрировать его в сценарий оболочки, который вызывается из GitBash в Windows 7, но он не работает должным образом по сравнению с тем, когда я тестирую его в Интернете.

pattern='^([a-z][\-a-z0-9_/\.]*)?([A-Z]{3,10}\-[0-9]+([\-a-z0-9_/\.]+)?)?$'

пример использования:

if [[ ! $name =~ $pattern ]]; then ...

Соответствующие строки:

  • abc / this-is / my.test1
  • abc / ABC-12345
  • ABC-12345
  • ABC-12345 / тест
  • ABC-12345 / 1.0
  • aabcd / ABC-123 / 1.0
  • abcd / abc-1234

Блокируемые строки:

  • abc / THIS-is /my.test1
  • 1.0 / abc / this-is / my.test1
  • Abcd_10 / ABCD-12345
  • ABCD-12345 / ABC-123
  • abcd / ABCd-1234
  • abc / THISISAVERYLONGEXAMPLE-1234

Моя версия bash

$ bash --version
GNU bash, version 4.4.19(2)-release (x86_64-pc-msys)
Copyright (C) 2016 Free Software Foundation, Inc.

Может ли кто-нибудь мне помочь?Спасибо!

1 Ответ

0 голосов
/ 23 октября 2018

Это лишь небольшая вариация синтаксиса между Python и GNU / Bash.

Вам просто нужно изменить свой шаблон так:

pattern='^([a-z][-a-z0-9_/\.]*)?([A-Z]{3,10}\-[0-9]+([-a-z0-9_/\.]+)?)?$'

В конце я просто удалил '\ 'перед' - ', в начале набора, например [- a-z0-9 _ /.] вместо [-a-z0-9 _ /.]

...