RegEx BackReference para combinar valores diferentes
Eu tenho uma regex que eu uso para corresponder à expressão do formulário(val1 operator val2)
Essa regex se parece com:
(\(\s*([a-zA-Z]+[0-9]*|[0-9]+|\'.*\'|\[.*\])\s*(ni|in|\*|\/|\+|\-|==|!=|>|>=|<|<=)\s*([a-zA-Z]+[0-9]*|[0-9]+|\'.*\'|\[.*\])\s*\))
O que é realmente bom e corresponde ao que eu quero, como você pode veraqui nesta demo
MAS: D (aqui vem a manteiga)
Quero otimizar o próprio regex, tornando-o mais legível e "compacto". Eu pesquisei como fazer isso e encontrei algo chamado referência remota, no qual você pode nomear seus grupos de captura e depois referenciá-los mais tarde como tal:
(\(\s*(?P<Val>[a-zA-Z]+[0-9]*|[0-9]+|\'.*\'|\[.*\])\s*(ni|in|\*|\/|\+|\-|==|!=|>|>=|<|<=)\s*(\g{Val})\s*\))
onde nomeei o grupo que captura o lado esquerdo da expressãoVal
e depois eu referenciei isso como(\g{Val})
, agora oproblema é que essa expressão como você pode veraqui único caso em que o lado esquerdo da expressão é exatamente o mesmo que o lado direito! por exemplo.(a==a)
ou(1==1)
e não corresponde a expressões como(a==b)
!
Agora a pergunta é: existe uma maneira de referenciar o padrão em vez do valor correspondente ?!