Регулярное выражение Rails для указанного шаблона c - PullRequest
1 голос
/ 06 мая 2020

Мне нужно получить первое вхождение этого шаблона [some-file-name ci] ИЛИ [some-file-name-ci.yml ci]

Пока я могу создать этот шаблон

CONFIG_FILE_PATTERN = /\[(\w*[ _-]ci|\w*[ _-]*\.yml ci|.\w*[ _-]*\.yml ci|.\w*[-_]\w*[ _-]*\.yml ci|\w*[-_]\w*[ _-]*\.yml ci|\w*[-_]\w*[ _-]*\w ci|.\w*[-_]\w*[ _-]*\w ci)\]/i.freeze

Это отлично работает для всех случаев, кроме случаев, когда в имени файла есть несколько дефисов (-).

Примеры:

[hello-ci.yml ci] # works fine for this
[hello.yml ci] # works fine for this
[hello ci] # works fine for this
[hello-world-ci.yml ci] # does not work for this as the file name now have multiple hyphens

Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 06 мая 2020

Вы можете использовать

/\[([^\]\[]*[ _-]ci)\]/i

См. Rubular demo

Подробности

  • \[ - a [ char
  • ([^\]\[]*[ _-]ci) - Группа 1:
    • [^\]\[]* - 0+ символов, кроме [ и ]
    • [ _-] - пробел, _ или -
    • ci - подстрока ci
  • \] - ] симв.

A Ruby тест в IDEONE для извлечения первого вхождения:

s = '[hello-ci.yml ci] works fine for this [second-DONT-EXTRACT-hello-ci.yml ci]'
puts s[/\[([^\]\[]*[ _-]ci)\]/i, 1] # => hello-ci.yml ci
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...