wow, nunca había visto nada de código de este lenguaje hasta esta clase, gracias beco!
Introducción a las Expresiones Regulares
Todo lo que aprenderás sobre expresiones regulares
¿Qué son las expresiones regulares?
Aplicaciones de las expresiones regulares
Introducción al lenguaje de expresiones regulares
El lenguaje: caracteres, operadores, y construcciones
El caracter (.)
Las clases predefinidas y construidas
Los delimitadores: +, *, ?
Los contadores {1,4}
El caso de (?) como delimitador
Not (^), su uso y sus peligros
Reto: Filtrando letras en números telefónicos utilizando negaciones
Principio (^) y final de linea ($)
Uso práctico de Expresiones Regulares
Logs
Teléfonos
URLs
Mails
Localizaciones
Nombres(?) Reto
Usos avanzados en Expresiones Regulares
Búsqueda y reemplazo
Expresiones Regulares en lenguajes de programación
Uso de REGEX para descomponer querys GET
Explicación del Proyecto
Perl
PHP
Utilizando PHP en la práctica
Python
Java
Java aplicado
JavaScript
`grep` y `find` desde consola
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Alberto Alcocer (Beco)
Aportes 72
Preguntas 8
wow, nunca había visto nada de código de este lenguaje hasta esta clase, gracias beco!
Pero no hay curso de Perl en Platzi. 😥 Jaja
Si necesitan declarar la equivalencia de string en perl tenemos que usar eq
Ejemplo:
if ($local eq "Venezuela") {
#...
}
Para Perl:
Todas las expresiones regulares van entre dos diagonales /miExpresionRegular/
Ejemplos:
^[\d]{4,4}\-02-.*$
^[\d]{4,4}.*?,(.*?),(.*?),(\d+),(\d+),.*$
-> lo podemos imprimir en Perl como:if(m/^[\d]{4,4}.*?,(.*?),(.*?),(\d+),(\d+),.*$/) {
if ($4 > $3) {
printf("%s (%d) - (%d) %s\n", $1, $3, $4, $2);
# $1 es el equipo local
# $2 es el equipo visitante
# $3 es el marcador del equipo local
# $4 es el marcador del equipo visitante
}
$match++;
}
^([\d]{4,4})\-.*?,(.*?),(.*?),(\d+),(\d+),.*$
-> Lo mostramos así:if(m/^([\d]{4,4})\-.*?,(.*?),(.*?),(\d+),(\d+),.*$/) {
if ($5 > $4) {
printf("%s: %s (%d) - (%d) %s\n", $1, $2, $4, $5, $3);
# $1 es la fecha
# $2 es el equipo local
# $3 es el equipo visitante
# $4 es el marcador del equipo local
# $5 es el marcador del equipo visitante
}
$match++;
}
m/regex/
#!/usr/bin/perl
use strict;
use warnings;
my $t = time;
open(my $f, "<../regex/results.csv") or die("no hay archivo");
my $match = 0;
my $nomatch = 0;
while(<$f>) {
chomp; # omite saltos de linea y otros caracteres
# 2018-06-04,Italy,Netherlands,1,1,Friendly,Turin,Italy,FALSE
# m --> match
# en pearl: /regex/
if(m/^[\d]{4,4}\-02\-.*$/){
printf $_."\n";
$match++;
} else{
$nomatch++;
}
}
close($f);
printf("Se encontraron \n - %d matches\n - %d no matches\ntardo %d segundos\n"
, $match, $nomatch, time() - $t);
#!/usr/bin/perl
use strict;
use warnings;
my $t = time;
open(my $f, "<../regex/results.csv") or die("no hay archivo");
my $match = 0;
my $nomatch = 0;
while(<$f>) {
chomp;
if(m/^([\d]{4,4}).*?,(.*?),(.*?),(\d+),(\d+),.*$/){
if($5 > $4) {
printf("%s: %s (%d) - (%d) %s\n",
$1, $2, $4, $5, $3
);
}
$match++;
} else {
$nomatch++;
}
}
close($f);
printf("Se encontraron \n - %d matches\n - %d no matches\ntardo %d segundos\n"
, $match, $nomatch, time() - $t);
Es genial esto! Aunque no utilice PERL te das cuenta de como puedes aplicarlo para otros lenguajes
Hola
Para ayudarme con los comandos y ejecuciones en Windows uso GIT bash, por si alguien ocupa.
uff… da gusto ver a @beco escribiendo código, se ve que es un experto sin duda alguna y sabe enseñar… mostro!
Me encanta de perl este tipo de cosas:
or die
Si ese lenguaje estuviese de moda actualmente, no me quiero imaginar la cantidad de memes.
otra forma de trabajar con expresiones regulares y perl:
$ cat parsea.pl
#!/usr/bin/perl
use warnings;
my $t = time;
$match = 0;
$nomatch = 0;
open (CMD,"./result.csv");
while ($line = <CMD>) {
if ($line =~ /^(\d+\-\d+\-\d+),(.*),(.*),(\d+),(\d+),(.*),(.*),(.*),(TRUE|FALSE)/) {
$date=$1;
$home_team=$2;
$away_team=$3;
$home_score=$4;
$away_score=$5;
$tournament=$6;
$city=$7;
$country=$8;
$neutral=$9;
if ($home_score > $away_score) {
$year = $date;
$year =~ s/(\d+)\-\d+\-\d+/$1/;
print "$year - $home_team ($home_score) - $away_team ($away_score)\n";
}
#print "*$line";
$match++;
} else {
#print $line;
$nomatch++;
}
}
print "se encontraron $match\n";
print "no se encontraron $nomatch\n";
print "tardo:".(time()-$t)."\n";
esta parte es muy interesante:
$year =~ s/(\d+)\-\d+\-\d+/$1/;
uso una expresion regular para extraer el año
espero les sirva
Desde perl.org pueden buscar indicaciones para descargar Perl en tu sistema operativo. Me sorprendió que Linux y MacOS lo tuvieran instalado por defecto.
Escribiendo perl -v
en la terminal de Linux se puede saber qué versión se está usando.
Primera vez que miro código de perl jaja
un gran ejemplo y medio confuso lo de las variables, aun que en los comentarios vi como se lidia con eso, la rapidez con la que se itera sobre el archivo completo es impresionante
Para ejecutar Perl de forma online
Esto está genial!!
Lo realice sin escapar el dígito inicial como si fuera una clase y obtuve el resultado, creo que no es del todo necesario escaparlo.
<code>
if(m/^\d{4,4}\-02\-.*$/) {
No sé Perl, pero qué bonito se ve escrito xD, de igual manera se entiende bastante la sintaxis porque felizmente antes llevé la introducción a C y luego también a C++:
#!/usr/bin/perl
use strict;
use warnings;
my $t = time;
open(my $f, “<./results.csv”) or die (“no hay archivo”);
my $match = 0;
my $nomatch = 0;
while(<$f>) {
chomp;
if(m/^([\d]{4,4})-.?,(.?),(.?),(\d+),(\d+),.$/) {
if($5 > $4) {
printf("%s: %s (%d) - (%d) %s\n", $1, $2, $4, $5, $3);
}
# print $_."\n";
$match++;
} else {
$nomatch++;
}
}
close($f);
printf(“Se encontraron matches: \n - %d matches\n - %d no matches\ntardo %d segundos\n”,
$match, $nomatch, time() - $t );
Admirable el trabajo de Beco al mostrar el poder de este lenguaje con las expresiones regulares.
definitivamentes las regex son parte indispansable para nuestro crecimiento pro!!
Super ese lenguaje, serīa genial tener un curso de este
su consola parece matrix
Las expresiones regulares en Perl inician con una letra que indica la accion a ejecutar, por ejemplo, m para matches
Excelente clase. Muy buen lenguaje de programacion!
23 minutos 🫠
Perl me parece un lenguaje muy potente, para realizar análisis y valides de datos de manera rápida y compleja. En potencia podría compararse talvez con Python.
Estoy muy impresionado de haber aprendido el uso de perl para las expresiones regulares. No sabia nada al principio e incluso daba por perdido el uso del codigo, pero ahora que me quedo claro estoy impresionado de la enseñaza del profe ahora si me quedo clarisimo. A seguir aprendiendo.
Aqui encontraremos mas datos interesantes sobre epoch
jejejejej
Bien por los galeses
Imprimir todos los partidos de la historia del futbol que han sido jugados en febrero
primera vez que veo PERL y no me disgusta
Definitivamente me quito el sombrero ante este curso. ¡Grande!
Platzi saco un curso de COBOL, así que estaría genial uno de Perl, y puesto a pedir… Porque no uno de REXX… 😂
Perl 🐪 es un excelente lenguaje… De eso no hay duda.
Probe hacer la misma funcionalidad del código en dart.
Perl es muy parecido a C++. Nunca me habit tocado ver Código Perl hasta esta clase xp
Al principio me había parecido aburrido y no le encontraba utilidad a REGEX pero wow, es increíblemente útil
0 segundos
Increíble, pero se nota la potencia que tiene esta herramienta…
¿Alguien más notó un error de edición del video a partir del minuto 6:59?
2 Segundos 😦
mas que interesanton perl! y sobre todo lo aplicado en este curso con las expresiones regulares!
Qué genial como encuentra todo, Perl tiene un parecido cercano a C.
Es la primera vez que veo el lenguaje.
SUPERFAST
Que maravilla
Increible
No conocia este lenguaje, pero se ve bien interesante para usar
Viendo esta clase se me ocurrieron muchas aplicaciones para mi trabajo. No entendía el poder de las expresiones regulares.
Son excelentes las REGEX
genial
Busqué cursos de Perl, pero no me arrojó ninguno. ¿Algún motivo? Xb
Ahora quiero aprender Perl 😄
Excelente explicación, se pudo observar el gran potencial de las expresiones regulares sobre todo este conjunto de datos para organizarlos rápidamente.
"Atom se pone loco, me choca"
jajajaj
Cuál sería su expresión regular para tomar todos los partidos de su país?
Y luego capturar: año, país a, país b y resultados. Luego mostrarlo en algún lenguaje, cuántas variables hay? $1, $2, $3 … $10, …?
Mi primer intento:
^(\d{4,4})\-.*?,(((.*[Pp]eru.*),(.*?))|((.*?),(.*[Pp]eru.*))),(\d+),(\d+),.*$
Si Perl no se usa actualmente, el porque los otros lenguajes lo han superado en interactividad, pero si con Perl este tipo de trabajos se hacen el menos de un segundos, me imagino los lenguajes como Python haciendo lo mismo en microsegundos.
No conozco Perl, pero esta clase me despertó curiosidad por aprenderlo
Para trabajar en perl, uso una application open que se llama Cygwin;
Cygwin es un entorno de ejecución y programación para Windows.
Es Unix-Like y se puede instalar muchos paquetes del mundo linux… ahi instale perl, (a veces tambien python, gpp, g++, gcc, imagemagick, wget etc…) y funciona genial.
Pueden echarle un vistazo si gustan.
Me impresiona la potencia que tienen las expresiones regulares con archivos tan grandes.
No conocía Perl pero sin duda es bastante potente
El índice de los conjuntos es ascendente y empieza desde 1, asignados de izquierda a derecha.
Ej.:
^[\d]{4,4}\-.*?,(.*?),(\w.*?),(\d+),.*$
(.?) = $1, (\w.?) = $2, (\d+) = $3
^([\d]{4,4})\-.*?,(.*?),(\w.*?),(\d+),.*$
([\d]{4,4}) = $1, (.?) = $2, (\w.?) = $3, (\d+) = $4
En la última parte le salen 39008 matches porque al agregar la condición deseada no movió la variable que cuenta el # de matches dentro de la misma:
$match++;
Debería ir dentro del if y fuera del mismo el $nomatch:
if($4 > $3) {
printf("%s (%d) - (%d) %s\n", $1, $3, $4, $2);
$match++;
}
$nomatch++;
Insertar meme de: “Do I detect C in this languaje?”
Perl es un lenguaje que hasta la fecha sigue siendo utilizado para fines de scripting, hay que tenerle respeto aunque no lo lleguemos a utilizar.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?