Estoy tratando de hacer un analizador de texto con PHP.
Estoy usando los siguientes operadores (como en el google).
" " (Operador de mayor jerarquia)
&&, + , || (De segunda jerarquia)
El problema es que no consigo hacer que...
1) Obtener las cadenas encerradas en " ", o las que estas despues de unas doble comillas si cerrar.
2) y con los demas operandos no he podido hacer nada ya que por ser las dobles comillas de mayor jerarquia, no he trabajado con los demas operadores.
Código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin título</title>
</head>
<body>
<form id="form1" name="form1" method="post" action="">
<input name="criterio" type="text" id="criterio" />
<input type="submit" name="Submit" value="Enviar" />
</form>
<?php
$criterio=$_POST["criterio"];
//Operador de primer Orden
$Op1='"';
//Operadores de 2do orden.
$and='&&';
$and2='+';
$or='||';
$Op_count=0;
$Op_cerrado="nada";
$temp_cadena="";
$trim_cadena=trim($criterio); //sin espacios al principio o final.
$longitud=strlen($trim_cadena); //Longitud de la cadena.
$lower_cadena=strtolower($trim_cadena); //Convierte a minusculas.
$chunk=chunk_split($lower_cadena,1,'-'); //Divide en 1 caracter
$split=split("-",$chunk);
$Op1_count=substr_count($lower_cadena,$Op1); //Las veces que aparece "
$and_count=substr_count($lower_cadena,$and); //LAs veces que aparece &&
$and2_count=substr_count($lower_cadena,$and2); //Las veces que aparece +
$or_count=substr_count($lower_cadena,$or); //Las veces que aparece ||
for($i=0;$i<strlen($split);$i++){
$restantes=$longitud-$i;
if($split[$i]==$Op1){
$Op_count++;
if($Op_cerrado!="no"){
$Op_cerrado="no";
}else{
$Op_cerrado="si";
}
}else{
$temp_cadena=$temp_cadena.$split[$i];
if($split[$i++]==$Op1 && $Opc_cerrado=="no"){
$Op_array[]=$temp_cadena;
}elseif($Op_cerrado=="si" && $split[$i++]==$Op1){
$NoOp_array[]=$temp_cadena;
}elseif($restantes==0){
$NoOp_array[]=$temp_cadena;
}
}
}
?>
</body>
</html>