🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: chile.comp.programacion
4 messages
4 total messages Started by cbd Wed, 18 Oct 2006 14:54
Extracción de substring
#1355
Author: cbd
Date: Wed, 18 Oct 2006 14:54
13 lines
1479 bytes
Estimados, hace un buen rato que me estoy cabeceando con el siguiente 
tema (en php) al cuál no le pego mucho:
Tengo un string en el que puede venir la siguiente cadena: "palabra1 OR 
palabra2 OR palabra3 AND palabra4".
Tengo que recuperar a u array las palabras que estén relacionadas por 
los operadores OR y AND, o sea en este caso en el arreglo1 las palabras: 
  palabra1,palabra2 y palabra3; y en el arreglo2 las palabras: palabra3 
y palabra4.
He tratado de hacerlo con expresiones regulares pero sin resultado.
Alguien me podría iluminar por favor?

Gracias desde ya.
Re: Extracción de substring
#1356
Author: Cristian Gutierrez
Date: Wed, 18 Oct 2006 23:10
49 lines
3070 bytes
Hoy en la ma~nana, cbazan__no_spa_m@vtr.net dijo:
> Estimados, hace un buen rato que me estoy cabeceando con el siguiente
> tema (en php) al cu�l no le pego mucho:
> Tengo un string en el que puede venir la siguiente cadena: "palabra1
> OR palabra2 OR palabra3 AND palabra4".
> Tengo que recuperar a u array las palabras que est�n relacionadas por
> los operadores OR y AND, o sea en este caso en el arreglo1 las
> palabras: palabra1,palabra2 y palabra3; y en el arreglo2 las palabras:
> palabra3 y palabra4.
> He tratado de hacerlo con expresiones regulares pero sin resultado.
> Alguien me podr�a iluminar por favor?

Huele a parser de SQL a medio cocinar. Pueden venir estos strings
tambi�n?

  palabra OR palabra AND palabra OR palabra

  palabra AND palabra OR palabra AND palabra

  palabra AND palabra OR palabra OR palabra AND palabra

  palabra AND ( palabra OR palabra OR palabra ) AND palabra

  palabra OR ( palabra AND ( palabra OR palabra ) )

  ( palabra AND ( palabra OR palabra ) ) OR ( palabra AND palabra )

Si es as� de arbitrario, te aviso que te vas a quedar corto con
expresiones regulares s� o s� (debe haber un teorema con nombre pomposo
que lo prueba). En ese caso tendr�as que implementar un peque�o parser
usando una "gram�tica", como se puede hacer por ejemplo con el m�dulo
Parse::RecDescent de Perl (o yacc, o alg�n equivalente para PHP).

Por otro lado, si siempre van a ser una serie ORs y ANDs y sin
par�ntesis, entonces lo que quieres hacer es factible, pero no es de
mucha utilidad para evaluar el resultado pues se pierde la asociatividad
(necesitas un �rbol para poder representar la expresi�n, y no dos
arreglos).

Por qu� no nos cuentas mejor qu� necesitas hacer, a ver si a alguien se
le ocurre una soluci�n m�s adecuada?

Salu2,

-- 
Guti
And while we're at it, why do LarryWall and company think that every
problem can be solved just by throwing syntax at it? I hate perl. 
                          -- TomAnderson, http://c2.com/cgi/wiki?WhyWeHatePerl
Re: Extracción de substring
#1357
Author: cbd
Date: Thu, 19 Oct 2006 00:44
73 lines
3701 bytes
La verdad es que apuntaba a un string que se ingresa en un formulario 
para realizar una búsqueda en una BD en la que el usuario ingresa unas 
palabras en las que puede haber dos posibilidades:
Opción. 1:
dato1 dato2 dato3  --->  Significa que va a buscar la cadena 		 
literalmente, para usar "campo_tabla LIKE '%dato1 dato2 dato3%'.

Opción 2:
dato1 OR dato2 OR dato3 AND dato4  --->  Significa que cualquiera de 
estos datos (dato1, dato2 y dato3) puede existir en la BD y dato4 debe 
existir en la BD.

En todo caso ya lo tengo funcionando y no ocupé regex al final sino que 
me hice una función que al comienzo utiliza split(...) y de ahí el resto.

Salu2


Cristian Gutierrez escribió:
> Hoy en la ma~nana, cbazan__no_spa_m@vtr.net dijo:
>> Estimados, hace un buen rato que me estoy cabeceando con el siguiente
>> tema (en php) al cuál no le pego mucho:
>> Tengo un string en el que puede venir la siguiente cadena: "palabra1
>> OR palabra2 OR palabra3 AND palabra4".
>> Tengo que recuperar a u array las palabras que estén relacionadas por
>> los operadores OR y AND, o sea en este caso en el arreglo1 las
>> palabras: palabra1,palabra2 y palabra3; y en el arreglo2 las palabras:
>> palabra3 y palabra4.
>> He tratado de hacerlo con expresiones regulares pero sin resultado.
>> Alguien me podría iluminar por favor?
> 
> Huele a parser de SQL a medio cocinar. Pueden venir estos strings
> también?
> 
>   palabra OR palabra AND palabra OR palabra
> 
>   palabra AND palabra OR palabra AND palabra
> 
>   palabra AND palabra OR palabra OR palabra AND palabra
> 
>   palabra AND ( palabra OR palabra OR palabra ) AND palabra
> 
>   palabra OR ( palabra AND ( palabra OR palabra ) )
> 
>   ( palabra AND ( palabra OR palabra ) ) OR ( palabra AND palabra )
> 
> Si es así de arbitrario, te aviso que te vas a quedar corto con
> expresiones regulares sí o sí (debe haber un teorema con nombre pomposo
> que lo prueba). En ese caso tendrías que implementar un pequeño parser
> usando una "gramática", como se puede hacer por ejemplo con el módulo
> Parse::RecDescent de Perl (o yacc, o algún equivalente para PHP).
> 
> Por otro lado, si siempre van a ser una serie ORs y ANDs y sin
> paréntesis, entonces lo que quieres hacer es factible, pero no es de
> mucha utilidad para evaluar el resultado pues se pierde la asociatividad
> (necesitas un árbol para poder representar la expresión, y no dos
> arreglos).
> 
> Por qué no nos cuentas mejor qué necesitas hacer, a ver si a alguien se
> le ocurre una solución más adecuada?
> 
> Salu2,
> 
Re: Extracci�n de substring
#1358
Author: Jos� Miguel Santib��ez
Date: Thu, 19 Oct 2006 03:43
35 lines
2451 bytes
En el cap�tulo anterior (news:eh5bnq$g1i$1@news.nivel5.cl), cbd 
<cbazan__no_spa_m@vtr.net> dijo:

> Estimados, hace un buen rato que me estoy cabeceando con el siguiente 
> tema (en php) al cu�l no le pego mucho:
> Tengo un string en el que puede venir la siguiente cadena: "palabra1 OR 
> palabra2 OR palabra3 AND palabra4".
> Tengo que recuperar a u array las palabras que est�n relacionadas por 
> los operadores OR y AND, o sea en este caso en el arreglo1 las palabras: 
>   palabra1,palabra2 y palabra3; y en el arreglo2 las palabras: palabra3 
> y palabra4.
> He tratado de hacerlo con expresiones regulares pero sin resultado.
> Alguien me podr�a iluminar por favor?
> 
> Gracias desde ya.
> 

un mecanismo relativamente sencillo de hacer la separaci�n (aunque no se 
cuan �til a tus necesidades):

$resultado = array();
$base = explode (' OR ', $lineaoriginal);
for ($i = 0; $i < count($base); $i++)
  $resultado[$i] = explode(' AND ', $base[$i]);

Con eso obtendr�as:
$resultado[0] = ["palabra1"]
$resultado[1] = ["palabra2"]
$resultado[2] = ["palabra3", "palabra4"]


-- 
Apoye a la campa�a de alfabetizaci�n y  |       Jose M. Santiba�ez A.
ordenaci�n de las news, cada post en su |          <jms@nivel5.cl>
lugar y el lugar exacto para cada post  |        <http://caos.cl/jms>
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads