RegEx BackReference para hacer coincidir diferentes valores

Tengo una expresión regular que utilizo para coincidir con la expresión del formulario(val1 operator val2)

Esta expresión regular se parece a:

(\(\s*([a-zA-Z]+[0-9]*|[0-9]+|\'.*\'|\[.*\])\s*(ni|in|\*|\/|\+|\-|==|!=|>|>=|<|<=)\s*([a-zA-Z]+[0-9]*|[0-9]+|\'.*\'|\[.*\])\s*\))

Lo cual es realmente bueno y coincide con lo que quiero como puedes veraquí en esta demo

PERO: D (aquí viene la mantequilla)

Quiero optimizar la expresión regular en sí misma haciéndola más legible y "compacta". Busqué cómo hacerlo y encontré algo llamado referencia inversa, en el que puede nombrar sus grupos de captura y luego hacer referencia a ellos más adelante como tal:

(\(\s*(?P<Val>[a-zA-Z]+[0-9]*|[0-9]+|\'.*\'|\[.*\])\s*(ni|in|\*|\/|\+|\-|==|!=|>|>=|<|<=)\s*(\g{Val})\s*\))

donde nombré el grupo que captura el lado izquierdo de la expresiónVal y luego lo mencioné como(\g{Val}), Ahora elproblema es que esta expresión como puedes veraquí ¡único caso donde el lado izquierdo de la expresión es exactamente el mismo que el lado derecho! p.ej.(a==a) o(1==1) y no coincide con expresiones como(a==b)!

Ahora la pregunta es: ¿hay alguna manera de hacer referencia al patrón en lugar del valor coincidente?

Respuestas a la pregunta(2)

Su respuesta a la pregunta