RegEx BackReference zum Abgleichen verschiedener Werte
Ich habe eine Regex, die ich verwende, um Ausdruck des Formulars zu entsprechen(val1 operator val2)
Dieser reguläre Ausdruck sieht folgendermaßen aus:
(\(\s*([a-zA-Z]+[0-9]*|[0-9]+|\'.*\'|\[.*\])\s*(ni|in|\*|\/|\+|\-|==|!=|>|>=|<|<=)\s*([a-zA-Z]+[0-9]*|[0-9]+|\'.*\'|\[.*\])\s*\))
Was ist eigentlich gut und passt zu dem was ich will wie du siehsthier in dieser Demo
ABER: D (hier kommt die Butter)
Ich möchte den regulären Ausdruck selbst optimieren, indem ich ihn lesbarer und "kompakter" mache. Ich habe nach einer Anleitung gesucht und eine so genannte Rückreferenz gefunden, in der Sie Ihre Erfassungsgruppen benennen und später als solche referenzieren können:
(\(\s*(?P<Val>[a-zA-Z]+[0-9]*|[0-9]+|\'.*\'|\[.*\])\s*(ni|in|\*|\/|\+|\-|==|!=|>|>=|<|<=)\s*(\g{Val})\s*\))
wo ich die Gruppe benannt habe, die die linke Seite des Ausdrucks erfasstVal
und später verwies ich es als(\g{Val})
, jetzt dieProble ist, dass dieser Ausdruck wie Sie sehen könnenHie Nur für den Fall, dass die linke Seite des Ausdrucks genau der rechten Seite entspricht! z.B.(a==a)
oder(1==1)
und passt nicht zu Ausdrücken wie(a==b)
!
Nun stellt sich die Frage: Gibt es eine Möglichkeit, das Muster anstelle des übereinstimmenden Werts zu referenzieren?!