:huh: Hola me he quedado seco de ideas en esto.
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.
<!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>
Pruebas con:
<?php
addslashes($criterio);
?>
http://www.php.net/manual/es/function.addslashes.php
Necesitas escapar las "".
;D
Es que estoy haciendo un buscador :(, eso no me sirve.
1) "Hola"
Obtener Hola
2) "Hola" maldito "PHP que no funciona :("
Obtener lo de " " y aparte lo que no esta encerrado.
Es que mi codigo es logico, pero no funciona.
Lo hize mas facil que que detecte cuando hay un " y aun asi no funciona, fue algo asi
<?php
$criterio=$_POST["criterio"];
//Operador de primer Orden
$Op1='"';
//Operadores de 2do orden.
$and='&&';
$and2='+';
$or='||';
$split_count=0;
$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 ||
while(!empty($split)){
if($split[$split_count]==Op1){
echo "xD";
}
$split_count++;
}
?>
Este es mi primer post y tampoco llevo mucho tiempo con este lenguaje pero yo tiraría por donde te ha indicado Ing_Amc. Si no te sirve la función addslashes puedes a la hora de recoger la cadena intentar sustituir los caracteres " por otros que tu quieras, como por ejemplo ··|· o cualquier "cadena" de caracteres que no se vayan a dar por su rareza.
Espero te sirva.
Hola,
Yo probaría con usar la funcion explode:
<?php
// Example 1
$pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);
echo $pieces[0]; // piece1
echo $pieces[1]; // piece2
?>
Esto te servirá almenos para separar las cadenas. Luego, con strpos (http://es2.php.net/manual/en/function.strpos.php), puedes saber que partes del array de explode estaban entre comillas.
Es el metodo mas rápido, aunque seguro que hay muchisimos mejores, como encontrar con strpos la posicion de la comilla y ese resultado + 1, empiezas a buscar la siguiente comilla. Luego cortas la cadena entre ambos resultados.
Saludos!
hola prueba con la funcionó MATCH...AGAINST con esto puedes lograr algo como los buscadores... además es mas rapida que otros métodos de consulta
http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html
http://www.desarrolloweb.com/articulos/2087.php
http://www.programacion.net/articulo/adr_buscador/