Cómo dejar de buscar si una cadena aparece antes que otra cadena en Regex

Cómo dejar de buscar si una cadena aparece antes que otra cadena en Regex

Soy nuevo en expresiones regulares, especialmente en expresiones regulares avanzadas (mirar hacia atrás o hacia adelante),

tengo dos lineas,

  1. elija bolas si están en una bolsa roja o si están en una bolsa verde
  2. 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

Manifestación

información relacionada