Ayuda: Analiza texto con PHP

Iniciado por Draco Heroicus, 25 Enero 2007, 23:22 PM

0 Miembros y 1 Visitante están viendo este tema.

Draco Heroicus

 :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&iacute;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>

дٳŦ٭



Con sangre andaluza :)


Draco Heroicus

 ;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++;
}

?>

alatul

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.

Ertai

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!
Si la felicidad se comprara, entonces el dinero sería noble.


void rotar_by_ref(int& a, int& b) {
   /* Quien dijo que no se podia sin una variable temporal? */
   *a = *a ^ *b;
   *b = *a ^ *b;
   *a = *a ^ *b;
}

[ Alberto]

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/
Debemos de hacer todas las cosas sencillas, excepto las cosas sencillas