Foros del Web » Programando para Internet » PHP »

Expresiones Regulares

Estas en el tema de Expresiones Regulares en el foro de PHP en Foros del Web. Hola amigos, les cuento que estoy viendo el tema de expresiones regulares y me agrada bastante porque vi la comprobación de un correo electrónico que ...
  #1 (permalink)  
Antiguo 23/10/2008, 22:02
 
Fecha de Ingreso: marzo-2005
Mensajes: 67
Antigüedad: 19 años, 1 mes
Puntos: 0
Expresiones Regulares

Hola amigos,
les cuento que estoy viendo el tema de expresiones regulares y me agrada bastante porque vi la comprobación de un correo electrónico que se puede realizar utilizando funciones (Son como 50 líneas de código) y utilizando expresiones regulares, que sólo se usa una linea: fantastico.

Pero, sin embargo aún me cuesta asimilar estos conceptos, he leido bastante sobre eso, pero aun no me animo a realizar ninguna prueba, por tanto, quisiera que me ayuden a comprender la siguiente expresion regular:

Código PHP:
$string "userNaME4234432_";
if (
preg_match('/^[a-z\d_]{4,28}$/i'$string)) {
    echo 
"example 1 successful.";

Porqué ponen el /^, \d_ ??? me gustaría me ayuden a comprender ésa expresión regular.

Muchas gracias por su valiosa ayuda.
  #2 (permalink)  
Antiguo 23/10/2008, 22:10
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Expresiones Regulares

/ ... separador
^ ... inicia
[ ... abre grupo
a-z ... rango de caracteres
\d ... dígitos (igual a [0-9])
_ ... guión bajo
] ... cierra grupo
{ ... abre cuantificador
4, ... mínimo, y
28 ... máximo
} cierra cuantificador
$ ... termina
/ ... separador
i ... opciones

su traducción mas precisa seria... "secuencia de letras y/o números y guión bajo de al menos cuatro caracteres y máximo veintiocho"

aun así, debes investigar mas... ya que el repetirte todo aquí sería algo cansado... suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 23/10/2008, 22:16
 
Fecha de Ingreso: marzo-2005
Mensajes: 67
Antigüedad: 19 años, 1 mes
Puntos: 0
Respuesta: Expresiones Regulares

Siempre se usan los separadores? y la i de opciones es opcional?
  #4 (permalink)  
Antiguo 23/10/2008, 22:51
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Expresiones Regulares

Asi es, siempre se usan los separadores.
Y la i de opciones significa hacer la busqueda insensible a mayusculas y/o minusculas.
  #5 (permalink)  
Antiguo 24/10/2008, 11:11
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: Expresiones Regulares

Cita:
Iniciado por preguntoncio Ver Mensaje
Código:
/^[a-z\d_]{4,28}$/i
Buenas,

Estás usando la sintaxis PCRE (compatible con Perl), aunque en PHP también puede emplearse si quieres la sintaxis POSIX (con las funcines ereg y eregi).

Con expresiones regulares PCRE, el inicio y final del patrón siempre se delimita con /. Los caracteres ^ y $ indican principio y final de la cadena, respectivamente. {4,28} define un rango (de longitudes) y el patrón entre corchetes indica que debe tratarse de caracteres (a-z), dígitos (\d) o el guión bajo _. La i tras la marca final del patrón indica que no se hará distinción entre mayúsculas y minúsculas.

Es decir, esta expresión se corresponde con "Algo que desde el principio hasta el fin sólo contiene caracteres, números o guiones bajos, con una longitud mínima de 4 y máxima de 28".

Si quieres practicar con las expresiones regulares, puedes usar una función similar a ésta (con preg_match_all) y un array de cadenas, para ensayar y mostrar las que coincidan:

Código PHP:
<?php
    $patron 
"/\b[a-z\d_]{4,28}\b/i";
    
$cadena "abC124 aBc_d14_ ab-1 66234 1Ab ab=cd __a1234";

    
$total  preg_match_all$patron$cadena$coincidencias );
    echo 
"Se han encontrado {$total} coincidencias:<br />";
    
print_r$coincidencias[0] );
?>
En este caso, con el array de ejemplo que he puesto, obtendrías:

Código:
Se han encontrado 4 coincidencias:
Array
(
    [0] => abC124
    [1] => aBc_d14_
    [2] => 66234
    [3] => __a1234
)
Nota1: de tu ER original, he sustituido ^ y $ por el patrón \b, que indica límites de palabras (principio o final de cadena, espacios, comas, puntos, ...)

Un saludo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:49.