2017-02-16 25 views
1

Я работаю с некоторыми сборками и должен написать регулярное выражение , чтобы включить некоторые ветви, но исключить другие (чтобы создать сборки).Как совместить ветви с отрицательным и позитивным регулярным выражением?

Лучшего, что я мог придумать это регулярное выражение, которое использует положительный и отрицательный предпросмотр, чтобы соответствовать названиям филиалов:

(?=.*12\.3)^((?!(version-12\.3)).)*$ 

Вот название ветви и , как они должны быть согласованы:

bugfix-ISSUE-123-some-details-version-12.3 
ISSUE-1234-some-other-details-version-12.3 
bugfix-12.3 
bugfix2-12.3 
12.3stuff 
stu12.3ff 

// match everything above, but don't match anything from below 

master 
version-12.3 
version-3.21 
some-other-branch 
bugfix-3.21 
test 

Пожалуйста, используйте this online tool (это только один я обнаружил, что поддерживает отрицательное и положительное опережения регулярного выражения es).

Сейчас регулярное выражение я придумал работает отлично, за исключением следующих 2-х ветвей:

bugfix-ISSUE-123-some-details-version-12.3 
ISSUE-1234-some-other-details-version-12.3 

Причиной они не включены, потому что я использовал это негативное опережение регулярного выражение, которое исключает version-12.3 (что я хочу), но и исключает все остальное, что включает в себя эту строку (как ISSUE-123-version-12.3, которую я хочу включены, но это не так):

((?!(version-12\.3)).)*$ 

Поможешь, пожалуйста?

+1

Хм, попробуйте ['^ (?! Version- \ d.). * 12 \ .3. * $'] (Https://regex101.com/r/tSMZJu/1). Если 'version-' запрещен как целая строка *, используйте '(?! Version - [\ d.] + $)' Вместо '(?! Version- \ d.)'. –

+0

Игорь, это работает? –

+0

@ WiktorStribiżew, да, пожалуйста, отправьте ответ, чтобы я мог проголосовать и принять его! Большое спасибо :) –

ответ

1

Если вам нужно обязательно все матчи, где строка, имеющий 12.3 внутри начинается с version- + несколько цифр/точек, вы можете использовать

^(?!version-\d+\.\d).*12\.3.*$ 

См regex demo.

Детали:

  • ^ - начало строки
  • (?!version-\d+\.\d) - отрицательный предпросмотр, который не проходит матч, если есть version-, 1+ цифры, точка и цифра в самом начале строка
  • .* - любые 0+ символы (кроме символов разрыва строки)
  • 12\.3 - это 12.3 зиЬзЬг ING
  • .* - любые 0+ символы (кроме символов разрыва строки)
  • $ - конец строки.

Если version- + цифры/точки отвергается как целой строки используйте

^(?!version-[\d.]+$).*12\.3.*$ 

См another regex demo.

Здесь ^ будет совпадать с началом строки, а затем (?!version-[\d.]+$) запустит проверку: если есть version- следует с 1+ цифр/точками до конца строки ($) матч будет неудачным.