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?