Eu sou novo em regex, especialmente em regex avançado (olhe para trás ou para frente),
Eu tenho duas linhas,
- escolha bolas se elas estiverem na sacola vermelha ou na sacola verde
- escolha bolas se elas estiverem na sacola verde ou na sacola vermelha
Eu queria combinar apenas se a linha estiver vermelha antes da primeira 'bolsa'. E não corresponde se a linha estiver vermelha após a primeira 'bolsa' (então combine 1 e não 2)
Se eu usar o seguinte regex,
sort.+?red(?!bag)
Ou
sort.+?(?!bag)red
Ainda parece corresponder à linha 2 em ambos os casos.
Qualquer dica/resposta é apreciada.
Responder1
Este faz o trabalho:
^(?:(?!\bbag\b).)*\bred\b.+?\bbag\b
Explicação:
^ # 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