RegEx BackReference для сопоставления различных значений

У меня есть регулярное выражение, которое я использую, чтобы соответствовать выражению формы(val1 operator val2)

Это регулярное выражение выглядит так:

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

Что на самом деле хорошо и соответствует тому, что я хочу, как вы можете видетьздесь, в этой демонстрации

НО: D (вот масло)

Я хочу оптимизировать само регулярное выражение, сделав его более читабельным и «компактным». Я искал, как это сделать, и нашел что-то, называемое обратная ссылка, в которой вы можете назвать свои группы захвата и затем ссылаться на них позже как таковые:

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

где я назвал группу, которая захватывает левую часть выраженияVal и позже я сослался на это как(\g{Val}), теперьпроблема является то, что это выражение, как вы можете видетьВот Единственный случай, когда левая сторона выражения точно такая же, как правая сторона! например(a==a) или же(1==1) и не соответствует выражениям, таким как(a==b)!

Теперь вопрос: есть ли способ ссылаться на шаблон вместо сопоставленного значения ?!

Ответы на вопрос(2)

Ваш ответ на вопрос