No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Utilizando PHP en la pr谩ctica

24/29
Recursos

Aportes 30

Preguntas 4

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

Banderas

Las expresiones regulares pueden tener banderas que afectan la b煤squeda, 茅stas deber谩n de estar hasta el final de la l铆nea.

Listado de Banderas en js:
i
Con este indicador, la b煤squeda no distingue entre may煤sculas y min煤sculas: no hay diferencia entre A y a
g
Con esta marca, la b煤squeda busca todas las coincidencias, sin ella, solo se devuelve la primera coincidencia.
m
Modo multil铆nea
s
Habilita el modo 鈥渄otall鈥, que permite un punto. para que coincida con el car谩cter de nueva l铆nea \ n
u
Permite el soporte completo de Unicode. La bandera permite el procesamiento correcto de pares sustitutos.
y
Modo 鈥渁dhesivo鈥: b煤squeda en la posici贸n exacta del texto

AWK: Forma una parte esencial del lenguaje y por extensi贸n de la herramienta awk de Unix/Linux

C++: Desde su versi贸n C++ 11 es posible utilizar expresiones regulares mediante la biblioteca est谩ndar, usando la cabecera <regex>.

Java: Existen varias bibliotecas hechas para java que permiten el uso de RegEx, y Sun planea dar soporte a estas desde el SDK.

JavaScript: A partir de la versi贸n 1.2 (ie4+, ns4+) JavaScript tiene soporte integrado para expresiones regulares.

Perl: Es el lenguaje que hizo crecer a las expresiones regulares en el 谩mbito de la programaci贸n hasta llegar a lo que son hoy en d铆a.

PCRE: Biblioteca de ExReg para C, C++ y otros lenguajes que puedan utilizar bibliotecas dll (Visual Basic 6 por ejemplo).

PHP: Tiene dos tipos diferentes de expresiones regulares disponibles para el programador, aunque la variante POSIX (ereg) va a ser desechada en PHP 6.

Python: Lenguaje de scripting con soporte de expresiones regulares mediante su biblioteca re.

.Net Framework: Provee un conjunto de clases mediante las cuales es posible utilizar expresiones regulares para hacer b煤squedas, reemplazar cadenas y validar patrones.

Nunca pierdan la capacidad de expresar bien los datos.

Evitemos la frustraci贸n, aceptemos los errores y tengamos presente que a la primera no se va ha entender una regex

Muy buena clase e Interesante dato a tener en cuenta sobre \t que permite avanzar espacios en base al siguiente m煤ltiplo de un n煤mero y que el m谩s com煤n es 8, para organizar los datos mejor en la consola.

Regex para hacer match con la totalidad de los datos
'/^(\d{4,4}\-\d\d\-\d\d),([\w\-\.\ 帽谩茅铆贸煤莽茫&]+),([\w\-\.\ 帽谩茅铆贸煤莽茫&]+),(\d+),(\d+),.*$/i'
Y programa completo:

<?php

$file = fopen("../Curso de Expresiones Regulares/results.csv", "r");

$match = 0;
$nomatch = 0;

$t = time();

while (!feof($file)) {
    $line = fgets($file);
    #echo $line;
    #'/^2018\-01\-(\d\d),.*$/'
    #2018-01-31,Mexico,Bosnia-Herzegovina,1,0,Friendly,San Antonio,USA,TRUE
    if (preg_match('/^(\d{4,4}\-\d\d\-\d\d),([\w\-\.\ 帽谩茅铆贸煤莽茫&]+),([\w\-\.\ 帽谩茅铆贸煤莽茫&]+),(\d+),(\d+),.*$/i', $line, $m)) {
        #print_r($m); #imprime el arreglo
        if ($m[4] == $m[5]) {
            echo "empate: " ;
        } elseif ($m[4] > $m[5]) {
            echo "local:   " ;
        } else {
            echo "visitante: ";
        }
        printf("\t%s, %s [%d - %d]\n", $m[2], $m[3], $m[4], $m[5]);
        $match++;
    } else {
        $nomatch++;
        echo $line;
    }
}

fclose($file);

printf("\n\nMatch %d\n No match %d\n", $match, $nomatch);

printf("Tiempo: %d segs\n", time() - $t);

la bandera i es case insensitive y va despu茅s del ultimo slash
para debugear se puede imprimir los no matches y verificar el por que no hay coincidencias

<?php
$file = fopen("../files/results.csv","r");
$match   = 0;
$nomatch = 0;
$t = time();
while(!feof($file)) {
    $line = fgets($file);
    if(preg_match('/^(\d{4}\-\d\d\-\d\d),(.+),(.+),(\d+),(\d+),.*$/i', $line, $m)) {
        if ($m[4] == $m[5]) {
            printf("empate: ");
        } elseif ($m[4] > $m[5]) {
            echo "local:  ";
        } else {
            echo "visitante: ";
        }
        printf("\t%s, %s [%d-%d]\n", $m[2], $m[3], $m[4], $m[5]);
        $match++;
    } else {
        $nomatch++;
    }
}
fclose($file);
printf("\n\nmatch: %d\nnomatch: %d\n", $match, $nomatch);
printf("tiempo: %d\n", time() - $t);

Tiempo = 1s tambi茅n.

solo un aportecito:
de hecho en la presentaci贸n, tal vez hubiese sido aun mejor poner el resultado del partido en medio.

entonces quedaria:

India [3-0] Kenya

El ejemplo anterior llevado a php

<?php
$t = time();
$file = fopen("../results.csv", "r");
$match = 0;
$nomatch = 0;

while(!feof($file)) {
  $line = fgets($file);
  // 1910-04-10,Netherlands,Belgium,7,0,Friendly,Haarlem,Netherlands,FALSE
  if(preg_match('/^(\d{4,4}\-\d{2,2}\-\d{2,2}).*?,(.*?),(.*?),(\d+),(\d+),.*$/', $line, $m)) {
    if($m[5] > $m[4]) {
      printf("(%s) - %s (%d) - (%d) %s\n",$m[1], $m[2], $m[4], $m[5], $m[3]);
      $match++;
    } else {
      $nomatch++;
    }
  } 
}

fclose($file);
printf("Para los equipos como visitantes se encontraron\n - %d ganados \n - %d perdidos\n", $match, $nomatch);
printf("Tiempo en ejecutar: %d segundos\n", time()-$t);

Soluci贸n para encontrar los no match:

preg_match('/^(\d{4}\-\d\d-\d\d),([\w\s\-\.谩-煤&]+),([\w\s\-\.谩-煤&]+),(\d+),(\d+),.*$/i',$line,$m)

Es increible lo que puede hacer PHP con las expresiones regulares. Mis respetos la verdad para este profe. Saludos

15 segundos :face_palm:

Incre铆ble, no entiendo nada pero poco a poco se vuelve mas claro jaja

me enreda porque no tiene ordenadas las ideas

La bandera 鈥榠鈥 es para case insensitive

como dato curioso, php te permite ponerle alias a los grupos ayuda para organizarse un poco mas.

Buena clase

Es curioso que a fecha 28/06/21 PHP se encuentra en el puesto 8 de popularidad seg煤n esta web justo debajo de JS

El c贸digo generado, nuevamente se ve bastante bien, aunque no est谩 dentro de mi lista de lenguajes por aprender el PHP, definivamente veo el potencial aqu铆.

muy buenaa practicaa

5 segundos 馃槮

Excelente clase.

super poderoso php con regex!! No es el mejor pero es muy popular!

Excelente.

Huy que nota ver esto 馃槃

gracias

<?php

$file = fopen("./results.csv", 鈥渞鈥);

$match = 0;
$nomatch = 0;

$t = time();

while(!feof($file)) {
$line = fgets($file);
if(preg_match(
鈥/^(\d{4}-01-\d\d),(.+),(.+),(\d+),(\d+),.*$/i鈥,
$line,
$m
)
) {
if($m[4] == $m[5]){
printf("Empate: ");
}elseif($m[4] > $m[5]){
echo 鈥渓ocal: 鈥;
} else {
echo 鈥渧isitante鈥;
}
printf(鈥漒t%s, %s [%d-%d]\n鈥, $m[2], $m[3], $m[4], $m[5]);
$match++;
} else {
$nomatch++;
}
}
fclose($file);

printf("\n\nmatch: %d\nno match: %d\n", $match, $nomatch);

printf(鈥渢iempo: %d segundos\n鈥, time() - $t);

Algunas cadenas y expresiones regulares en PHP