
Soy nuevo en expresiones regulares, especialmente en expresiones regulares avanzadas (mirar hacia atrás o hacia adelante),
tengo dos lineas,
- elija bolas si están en una bolsa roja o si están en una bolsa verde
- elija bolas si están en una bolsa verde o si están en una bolsa roja
Quería tener una coincidencia solo si la línea es roja antes de la primera 'bolsa'. Y no coincidir si la línea es roja después de la primera 'bolsa' (por lo tanto, coincida con 1 y no con 2)
Si uso la siguiente expresión regular,
sort.+?red(?!bag)
O
sort.+?(?!bag)red
Todavía parece coincidir con la línea 2 en ambos casos.
Se agradece cualquier pista/respuesta.
Respuesta1
Éste hace el trabajo:
^(?:(?!\bbag\b).)*\bred\b.+?\bbag\b
Explicación:
^ # 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