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