Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Utilizando PHP en la práctica

24/29
Recursos

Aportes 27

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

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 “dotall”, 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 “adhesivo”: 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.

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.

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

15 segundos :face_palm:

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

Tiempo = 1s también.

Solución para encontrar los no match:

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

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);

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);

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

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

<?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);

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

La bandera ‘i’ es para case insensitive

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", “r”);

$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 “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\nno match: %d\n", $match, $nomatch);

printf(“tiempo: %d segundos\n”, time() - $t);

Algunas cadenas y expresiones regulares en PHP