• Publicidad

Buscar varias de palabras "regular exression"

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

Buscar varias de palabras "regular exression"

Notapor Miguel » 2005-11-11 13:37 @609

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
Miguel
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2005-11-11 13:30 @604

Publicidad

Notapor explorer39 » 2005-11-11 13:54 @621

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/;
}
Última edición por explorer39 el 2005-11-11 14:24 @641, editado 1 vez en total
explorer39
 

Perdido

Notapor Miguel » 2005-11-11 14:05 @628

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
Miguel
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2005-11-11 13:30 @604

Notapor explorer39 » 2005-11-11 17:53 @787

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.
explorer39
 

problemas con las regular expression

Notapor Miguel » 2005-11-11 20:06 @879

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
Miguel
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2005-11-11 13:30 @604

Notapor explorer39 » 2005-11-12 06:40 @319

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.
explorer39
 


Volver a Avanzado

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados