Как остановить поиск, если строка встречается перед другой строкой в ​​Regex

Как остановить поиск, если строка встречается перед другой строкой в ​​Regex

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

У меня есть две строчки,

  1. выбирайте мячи, если они в красном мешке, или если они в зеленом мешке
  2. выбирайте мячи, если они в зеленом мешке, или если они в красном мешке

Я хотел, чтобы совпадение было только в том случае, если линия имеет красный цвет до 1-го 'bag'. И не совпадало, если линия имеет красный цвет после 1-го 'bag' (то есть совпадало 1, а не 2)

Если я использую следующее регулярное выражение,

sort.+?red(?!bag)

Или

sort.+?(?!bag)red

В обоих случаях он по-прежнему соответствует строке 2.

Любая подсказка/ответ будет оценена по достоинству.

решение1

Этот справляется со своей задачей:

^(?:(?!\bbag\b).)*\bred\b.+?\bbag\b

Объяснение:

^               # beginning of line
                # tempered greedy token
  (?:           # start non capture group
    (?!         # negative lookahead
      \bbag\b   # "bag" surrounded with word boundary, not matching bags or airbag
    )           # end lookahead
    .           # any character
  )*            # end group, may appear 0 or more times
  \bred\b       # "red" surrounded with word boundary, not matching tired or redition
  .+?           # 1 or more any character, not greedy
  \bbag\b       # "bag" surrounded with word boundary

Демо

Связанный контент