Предполагая, что есть только одна троичная, вы можете разбить строку на отдельные части троичного выражения и оценить части по отдельности.
$eq = '3.07 > 10 ? 1.93 * 10 : 3.07 * 1.93';
preg_match('/(.+)\?(.+):(.+)/', $eq, $parts);
if (isset($parts[3])) {
$result = Parser::solve($parts[1]) ? Parser::solve($parts[2]) : Parser::solve($parts[3]);
} else {
$result = Parser::solve($eq);
}
Если существует более одной троичной, вы, вероятно, все еще могли бысделай это, если ты был лучше в регулярных выражениях, чем я.:)
Я признаю, что этот подход немного наивен, я могу думать о различных вещах, которые довольно легко его сломают, например, троичное подвыражение в скобках, но он может работать для простых примеров, подобных приведенному в вашемвопрос.