• Publicidad

Cómo obtener string dentro de una cadena

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Cómo obtener string dentro de una cadena

Notapor rithchard » 2010-04-19 12:09 @548

Saludos a todos a este estupendo foro;

Quisiera recurrir a ustedes para sacarme de un duda ;D

El problema surge cuando tengo una cadena de texto, y quisiera buscar strings y guardarlos en un array, pero los patrones de búsqueda que estén entre []. Ejemplo, [hola],[hola2], o sea, todo lo que esté dentro de [], y los que lo encuentre los guarde en un array.

Gracias.
rithchard
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2010-04-19 11:59 @540

Publicidad

Re: Cómo obtener string dentro de una cadena

Notapor explorer » 2010-04-19 12:17 @554

Bienvenido a los foros de Perl en Español, rithchard.

Eso lo consigues con una expresión regular, escapando los '[' con '\', y recorriendo la cadena de forma iterativa con '/g'.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Cómo obtener string dentro de una cadena

Notapor charlygarcia » 2010-04-19 13:50 @618

Pues yo lo haría de la siguiente manera:
(tal vez no sea la mejor pero es una :)
supongamos que tenemos la variable $cadena.

$cadena='[hola],[hola2],[perl],[hola],[hola2],[perl]';

yo rompería la cadena usando la función split() con el texto que se repite ],[

my @data = split('],[', $cadena);

Ahora me quedan dos elementos con dos caracteres demás.
el primero: $data[0] (le sobra [ )
el ultimo: $data[$data-1] (le sobra ] )

y a cada uno le debo quitar el carácter que le sobra.

Y ahora podría recorrer los elementos que he sacado de la cadena usando un foreach()

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
foreach(@data)
{
   print($_);
}
 
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4



y bueno, así lo haría yo...
[text]¿Cómo lograr que no se seque una gota de agua? Arrojándola al mar. [/text] - Nota: Este tag no se puede utilizar en firmas.Samsara
Avatar de Usuario
charlygarcia
Perlero nuevo
Perlero nuevo
 
Mensajes: 54
Registrado: 2009-03-06 23:16 @011

Re: Cómo obtener string dentro de una cadena

Notapor rithchard » 2010-04-19 15:09 @673

No sé si me entendieron.

Leo un archivo.txt. El contenido del archivo puede ser este:
"hola como [estan] amigos de perlenespañol, [saludos] a todos del [foro]"

Lo almaceno en un array. Ahí estoy plantado...

Quiero que saque todas las strings de archivo.txt que contengan palabras que estén dentro de un [], y que lo printee o lo guarde en un array, para que luego lo pueda printear.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
print $encontrados[2]; # foro
print $encontrados[0]; # que sería la primera que encontró.
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Disculpa por las molestias.
rithchard
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2010-04-19 11:59 @540

Re: Cómo obtener string dentro de una cadena

Notapor charlygarcia » 2010-04-19 17:00 @750

MI estimado amiguito

eso ya es otra pregunta.....
[text]¿Cómo lograr que no se seque una gota de agua? Arrojándola al mar. [/text] - Nota: Este tag no se puede utilizar en firmas.Samsara
Avatar de Usuario
charlygarcia
Perlero nuevo
Perlero nuevo
 
Mensajes: 54
Registrado: 2009-03-06 23:16 @011

Re: Cómo obtener string dentro de una cadena

Notapor explorer » 2010-04-19 17:09 @756

rithchard, lo que pasaba es que pusiste la pregunta en el foro avanzado. Y mi respuesta estaba acorde a la dificultad del foro.

Aquí, en el básico, la respuesta es:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5.  
  6. my $cadena = 'hola como [estan] amigos de perlenespañol, [saludos] a todos del [foro]';
  7.  
  8. my @encontrados = $cadena =~ /\[(.*?)\]/g;
  9.  
  10. print "@encontrados\n";
  11.  
  12. __END__
  13. estan saludos foro
  14.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

que, como ves, sí que sigue la solución indicada antes: una expresión regular, escapar los '[' con '\' y usar '/g' para recorrer toda la $cadena.

:wink:
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

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