Thread View: chile.comp.programacion
4 messages
4 total messages
Started by cbd
Wed, 18 Oct 2006 14:54
Extracción de substring
Author: cbd
Date: Wed, 18 Oct 2006 14:54
Date: Wed, 18 Oct 2006 14:54
13 lines
1479 bytes
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
Author: Cristian Gutierrez
Date: Wed, 18 Oct 2006 23:10
Date: Wed, 18 Oct 2006 23:10
49 lines
3070 bytes
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
Author: cbd
Date: Thu, 19 Oct 2006 00:44
Date: Thu, 19 Oct 2006 00:44
73 lines
3701 bytes
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
Author: Jos� Miguel Santib��ez
Date: Thu, 19 Oct 2006 03:43
Date: Thu, 19 Oct 2006 03:43
35 lines
2451 bytes
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