<?php
	//PHP regex recursivo
	// https://pt.stackoverflow.com/q/200254/53463

	function validar($expr) {
		$oper   = '[-+*\/]';           //um operador matemático
		$numero = '(?:- ?)?\d*\.?\d+'; //float
		$nomes  = '(?:var|perg|ind)';  //nomes de função
		
		$recurse= '(?1)';
		
		$parens = '\(' . $recurse . '\)';
		$funcao = "$nomes?$parens";
		
		$x = "(?:$numero|$funcao)";
		$s = $x . "(?:$oper$recurse)*";
		
		$regex = "/^($s)$/";
			 //=> /^((?:(?:- ?)?\d*\.?\d+|(?:var|perg|ind)?\((?1)\))(?:[-+*\/](?1))*)$/
		
		return preg_match( $regex, $expr);
	}
	
	
	//  EXEMPLOS
	$exemplos = [
			'9-8+',
			'(ind(10)+15)-10',
			'(ind(10)+15-10',
			'1000-(perg(25)*2)',
			'1000-perg(25)*2)',
			'1000-perg(25)*2',
			'25/var(1)',
			'12*2-(58+1)/5',
			'(perg(6)*perg(4)*)*1000000',
			'0'
		];
		
	foreach ($exemplos as $expressao) {
		echo (validar($expressao) ? '✔️' : '✖️') . " $expressao\n";
	}