регулярные выражения только последние матчи - PullRequest
0 голосов
/ 09 января 2020

Я пытаюсь создать регулярное выражение для захвата:

 ( ( Workers  >  2 ) AND ( Minute  between 3 AND 10) )

( ( Workers  >  2 ) AND ( Minute  between 3 AND 10) ) AND ( ( Pais  = 32) AND ( Minute  >  5 ) )

Я хочу захватить:

Матч 1:

 Full match:    AND ( Minute  between 3 AND 10)

 Group 1: Minute  between 3 AND 10

Матч 2:

 Full match:    AND ( Minute  >  5 )

 Group 1: Minute  >  5

Я создал следующее регулярное выражение:

AND.*\(.*(Minute.*?)\)

, но во второй строке совпадение начинается с первого вхождения , Мне нужен последний матч.

Вы можете проверить здесь: https://regex101.com/r/6Nt3UX/2

Ответы [ 2 ]

1 голос
/ 09 января 2020

Если вы используете. net Затем вы можете передать еще один параметр в Match Function. RegexOptions.RightToLeft Это будет искать совпадение, начиная справа. Regex.Match (вход, «Шаблон», RegexOptions.RightToLeft) Спасибо

0 голосов
/ 09 января 2020

Изменение точек на «не скобки» и добавление вида вперед, чтобы найти только последний член, соответствует вашим целям:

AND[^(]*\([^(]*(Minute[^)]*?)\)(?=[ )]*$)

См. живая демонстрация .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...