Página 1 de 1

Buscar varias de palabras "regular exression"

NotaPublicado: 2005-11-11 13:37 @609
por Miguel
Hola,
Me gustaria saber como se puede hacer una busqueda de varias palabras utilizando "regular expression".
Tengo un fichero de texto, si hago una busqueda por ejemplo:
if ($line =~/\Q$search\E/i) {

Si pongo en el buscador : Hola & Mundo, no me aparece.(Es decir una busqueda boolean)

Y como se puede hacer que escribras el testo entre comillas.

Gracias de antemano

NotaPublicado: 2005-11-11 13:54 @621
por explorer39
Primero, tienes que contruir la expresión regular en una variable con la función qr(). Luego haces la comprobación del patrón utilizando esa misma variable, como si fuera cualquier otro contenido.
Por ejemplo:
Código: Seleccionar todo
$patron = qr(Hola|Adios);
@texto = split("\n","Hola, soy el caballero de la triste figura.\nPara servirle a Dios y a usted.\nAdios, buen caballero");
foreach ( @texto )
{
  print if m/$patron/;
}

Perdido

NotaPublicado: 2005-11-11 14:05 @628
por Miguel
Hola Explorer 39,
No entiendo muy bien loque me comentas, crees que esta mal hecho este scrip, en el tema de revisar varias palabras:

#!/usr/local/bin/perl -w


use CGI::Carp qw( fatalsToBrowser ); ######## for debugging info in the browser
use CGI qw(:standard -debug); ######## CGI library
#use HTML::Template;
##########################################
#print "Content-type: text/html\n\n" ;


#################################
# Retrieve the form data

my $search = param("search");

########################################
#Definition of a flag witn the value False
my $found = "false";



print header();
print start_html();
print "\n<p>There were found these results for \" $search \" </p>\n<ol>\n";


####################################
# Open the file Lnotes

open (FILE, "<Lnotes.htm");
@lines =<FILE>;
close (FILE);

#count the words
$count = 0;


# Search the word in the file

foreach $line (@lines) {
if ($line =~/\Q$search\E/i) {
print $line;
$found = "true";
$count++;
print "<br>";

}


} #end of foreach
print "\n";
if ($found eq "false") {
print "No result found for $search";
}



print "<p>";
print "Total of word of $search $count";

print end_html();

Si me puedes dar alguna solucion te lo agradeceria, mucho!

Gracias,

Miguel

NotaPublicado: 2005-11-11 17:53 @787
por explorer39
El script está bien, pero sólo está preparado para buscar una palabra cada vez.
Una posible mejora es analizar primero si el usuario ha colocado el signo '&' para buscar por varias palabras a la vez. En ese momento, dividir la cadena que el usuario nos ha pasado, limpiar de espacios innecesarios y crear una expresión regular para realizar la búsqueda:
Código: Seleccionar todo
if ( $search =~ /\&/ )
{
  @search = map { s/^\s*//g; s/\s*$//g; $_ } split '&', $search;
  $search = '(' . join("|",@search) . ').*(' . join("|",reverse @search) . ')';
  $search = qr($search);
}
Luego, el programa sigue igual que antes.

problemas con las regular expression

NotaPublicado: 2005-11-11 20:06 @879
por Miguel
Ante todod gracias Explorer 39.
Pero tengo una gran duda, no soy muy buen programador y lo que me comentas no se donde ubicardo ( entre el foreach...y el if ) o despues del if, en este ultimo, creo que ya se hace la busqueda no?

Com ves ando un poco corto de programacion.

Gracias otra vez

Miguel

NotaPublicado: 2005-11-12 06:40 @319
por explorer39
En ese caso hubiera sido mejor postear en el foro 'Basico' :-) Yo suelo responder de forma muy diferente según el foro donde esté.
Tienes que ponerlo después de leer el parámetro "search" pasado por el cgi.
Quedan pendientes otros temas, como que el usuario pueda realizar búsquedas con OR y entre comillas dobles para búsquedas exactas de palabras seguidas.