Как остановить поиск, если строка находится перед другой строкой в Regex
Я новичок в регулярных выражениях, особенно продвинутых регулярных выражений (смотреть в будущее или смотреть в будущее),
У меня есть две строки,
- выбирайте шары, если они в красной сумке или в зеленой сумке
- выбирайте шары, если они в зеленой сумке или в красной сумке
Я хотел провести матч, только если перед первой "сумкой" линия будет красной. И не совпадать, если строка имеет красный цвет после 1-го "мешка" (поэтому совпадение 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