So beenden Sie die Suche, wenn in Regex eine Zeichenfolge vor einer anderen Zeichenfolge auftritt

So beenden Sie die Suche, wenn in Regex eine Zeichenfolge vor einer anderen Zeichenfolge auftritt

Ich bin neu bei Regex, insbesondere bei fortgeschrittenen Regex (nach hinten schauen oder vorausschauen),

Ich habe zwei Zeilen,

  1. Wählen Sie Bälle, wenn sie in einer roten oder grünen Tasche sind
  2. Wählen Sie Bälle, wenn sie in einer grünen Tasche sind, oder wenn sie in einer roten Tasche sind

Ich wollte nur dann eine Übereinstimmung, wenn die Zeile vor der ersten „Tasche“ rot ist. Und keine Übereinstimmung, wenn die Zeile nach der ersten „Tasche“ rot ist (also Übereinstimmung 1 und nicht 2)

Wenn ich den folgenden regulären Ausdruck verwende,

sort.+?red(?!bag)

Oder

sort.+?(?!bag)red

Es scheint in beiden Fällen immer noch mit Zeile 2 übereinzustimmen.

Jeder Hinweis/jede Antwort ist willkommen.

Antwort1

Dieses hier erledigt den Job:

^(?:(?!\bbag\b).)*\bred\b.+?\bbag\b

Erläuterung:

^               # 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

Demo

verwandte Informationen