Foros del Web » Programando para Internet » PHP »

[APORTE] Expresiones PCRE

Estas en el tema de [APORTE] Expresiones PCRE en el foro de PHP en Foros del Web. Funciones preg_match ( patron , contexto [, captura ]) preg_match_all ( patron , contexto [, captura ]) preg_replace ( patron , reemplazo , contexto ) ...

  #1 (permalink)  
Antiguo 20/11/2008, 02:31
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
[APORTE] Expresiones PCRE

Funciones

preg_match(patron, contexto[, captura])
preg_match_all(patron, contexto[, captura])
preg_replace(patron, reemplazo, contexto)
preg_replace_callback(patron, callback, contexto)
preg_grep(patron, array)
preg_split(patron, contexto)

NOTA: solo el parámetro de patron debe llevar separadores familiares entre si, ademas de no ser reservados (se pueden usar, pero solo si no se usan en la expresión) si se usa con las funciones mencionadas preg_*

/h(o|0)+la/i - hooo00oola, hola, h0ola, etc.
|h[o0]*la|i - hla, hola, h0la, h000o000la, etc.
@#[a-f0-9]{3,6}@i #fcf, #06fc05, etc.
#\d,\d\,d# - 0,255,9999999 etc.


Código PHP:
$str 'mi mama me ama y mi pa tambien';

preg_match_all('<\b(?:(?:m|p)a){1,2}\b>'$str$tmp);

$out print_r($tmptrue);

echo 
"$str<pre>$out</pre>"

Grupos o clases de caracteres

\w Cualquier "palabra" (a-z 0-9 _)
\W Cualquier NO "palabra”
\s Espacio (espacio, tabulador, CRLF)
\S Cualquier NO espacio
\d Dígitos (0-9)
\D Cualquier NO dígito
. (punto) – Cualquier carácter, excepto nueva linea

Meta caracteres

^ Inicio del contexto (o linea en modo multilinea)
$ Fin del contexto (o linea en modo multilinea)
[ Inicio del grupo o clase de caracteres
] Fin del grupo o clase de caracteres
| Alternativas, ej. (a|b) captura a o b
( Inicia un subpatron (o captura)
) Fin del subpatron
\ Escape de caracteres

Cuantificadores

n* Cero o mas de n
n+ Uno o mas de n
n? Uno o ninguno de n
{n} Exactamente n ocurrencias
{n,} Al menos n ocurrencias
{,m} Hasta m ocurrencias
{n,m} Entre n y m ocurrencias (inclusivo)

Modificadores de contexto

i Insensitivo – no distingue mayúsculas de minúsculas
m Multilinea - ^ y $ indican el inicio y fin de cada linea
s Todo - el . (punto) captura todo, incluyendo nueva linea
x Extendido – comentarios & espacios
e Evaluar (preg_replace) – interpreta el reemplazo como código PHP
S Análisis extra del patron
U El patron es insatisfactorio
u El patron es tratado como UTF-8

captura basada en puntos

\b Entre palabras (\w)
\B No entre palabras
\A Inicio del contexto (^)
\Z Fin del contexto o fin de linea
\z Fin del contexto ($)
\G Primer posición de captura en el contexto

Modificadores de Sub patron y captura

(?:) No captura subpatron - ((?:foo|fu)bar) captura foobar o fubar sin que foo o fu se capture como subpatron
(?=) Mirar adelante - foo(?=bar) captura foo cuando es seguido de bar
(?!) Mirar adelante (negativa) - foo(?!bar) captura foo cuando NO es seguido de bar
(?<=) Mirar atras - (?<=foo)bar captura bar cuando es precedido de foo
(?<!) Mirar atras (negativa) - (?<!foo)bar captura bar cuando NO es precedido de foo
(?>) Al menos el subpatron - (?>\d+)bar captura aun cuando bar NO esta presente
(?(x)) Condicionales de subpatron - (?(3)foo|fu)bar captura foo si el 3er subpatron se capturo, fu si no
(?#) Comentario - (?# el patron hace x y o z)


PDTA:

ejemplos y usos, bastantes hay en el manual de PHP... y en el Internet mismo, suerte!


Edito: vi este enlace (apenas)

Regular expressions cheat sheet
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Última edición por pateketrueke; 21/11/2008 a las 02:31 Razón: erratas
  #2 (permalink)  
Antiguo 20/11/2008, 03:13
 
Fecha de Ingreso: mayo-2005
Ubicación: Muy lejos de aquí
Mensajes: 367
Antigüedad: 18 años, 11 meses
Puntos: 0
Respuesta: [APORTE] Expresiones PCRE

Genial! Gracias compañero!
__________________
Saludos!
  #3 (permalink)  
Antiguo 20/11/2008, 04:07
Avatar de danielrivas  
Fecha de Ingreso: noviembre-2007
Ubicación: Preprocessing
Mensajes: 275
Antigüedad: 16 años, 5 meses
Puntos: 6
Respuesta: [APORTE] Expresiones PCRE

Joder, me acabo de dar cuenta que este era el cheat sheet que buscaba antes para ayudar en otro post.
  #4 (permalink)  
Antiguo 20/11/2008, 12:34
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 4 meses
Puntos: 34
Respuesta: [APORTE] Expresiones PCRE

Muy bueno!, gracias por el aporte!!!
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #5 (permalink)  
Antiguo 20/11/2008, 23:25
Avatar de emiliodeg  
Fecha de Ingreso: septiembre-2005
Ubicación: Córdoba
Mensajes: 1.830
Antigüedad: 18 años, 7 meses
Puntos: 55
Respuesta: [APORTE] Expresiones PCRE

muy bueno felicitacioens!
__________________
Degiovanni Emilio
developtus.com
  #6 (permalink)  
Antiguo 20/11/2008, 23:38
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: [APORTE] Expresiones PCRE

Excelente aporte, será muy útil para citarlo como referencia cuando se pregunte sobre el tema .
Cita:
Iniciado por pateketrueke Ver Mensaje
n? Cero o ningún de n
Debería ser: Cero o uno de n .
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #7 (permalink)  
Antiguo 21/11/2008, 02:31
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: [APORTE] Expresiones PCRE

Coincido con los comentarios Tener este hilo "a mano" puede venir muy bien para quien desee tener una referencia rápida sobre el tema.

Por otro lado, añadiría algúncomentario a las "capturas" en preg_replace (el uso de referencias a "partes" del patrón para sustituciones o llamadas a funciones).

Un saludo.
  #8 (permalink)  
Antiguo 21/11/2008, 02:32
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: [APORTE] Expresiones PCRE



creo que andaba en otro lado, ya corregí la errata...


PDTA:

invito a los demás, algún aporte extra sobre el tema... ejemplos, no se... etc.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 21/11/2008, 09:49
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 4 meses
Puntos: 34
Respuesta: [APORTE] Expresiones PCRE

A ver si me resuelven ésta duda. Tengo:

Código PHP:
$cadena 'ABCADEAGFGA';
$cadena preg_replace('/(^a|a$)/i'''$cadena);
echo 
$cadena
Esto hará que se reemplacen la A del inicio y la A del fin.

Ahora, yo necesito una negación de esto, o sea, que se reemplacen las A siempre y cuando no estén al inicio ni al fin, debería quedar el string: 'ABCDEGFGA'.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #10 (permalink)  
Antiguo 21/11/2008, 12:13
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 4 meses
Puntos: 34
Respuesta: [APORTE] Expresiones PCRE

Me autorespondo:

Código PHP:
$str 'ABCADEAGFGA';
echo 
$str,'<br>';
$str preg_replace('/(?!^)a(?!$)/i','',$str);
echo 
$str
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #11 (permalink)  
Antiguo 02/12/2008, 06:40
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 9 meses
Puntos: 8
Respuesta: [APORTE] Expresiones PCRE

Hola , alguien me puede explicar en esta explicación que significa en concreto esto:

\w Cualquier "palabra" (a-z 0-9 _)

No entiendo la \w que quiere decir , es decir hay que poner \w cada vez que busquemos un rango de la a a la z o de 0 a 9 ?


Gracias de antemano.
  #12 (permalink)  
Antiguo 02/12/2008, 07:07
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 4 meses
Puntos: 34
Respuesta: [APORTE] Expresiones PCRE

Claro, para simplificar el 0-9 y a-z pones /w.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #13 (permalink)  
Antiguo 02/12/2008, 07:14
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 9 meses
Puntos: 8
De acuerdo Respuesta: [APORTE] Expresiones PCRE

Cita:
Iniciado por nicolaspar Ver Mensaje
Claro, para simplificar el 0-9 y a-z pones /w.
Si no es mucho pedir alguien me podría poner un ejemplo por favor
De antemano mil gracias y felices fiestas a tod@s.
  #14 (permalink)  
Antiguo 02/12/2008, 09:03
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 4 meses
Puntos: 34
Respuesta: [APORTE] Expresiones PCRE

Claro, esto:
Código PHP:
$str 'oia.a&$re3';
echo 
preg_replace('/[a-z0-9]/i','-',$str); 
Es lo mismo que esto:
Código PHP:
$str 'oia.a&$re3';
echo 
preg_replace('/[/w]/i','-',$str); 
En ambos casos debería imprimirte "---.-&$---".

Saludos.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #15 (permalink)  
Antiguo 02/12/2008, 10:01
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: [APORTE] Expresiones PCRE

De hecho es \w, no es /w.

Saludos.
  #16 (permalink)  
Antiguo 02/12/2008, 10:06
 
Fecha de Ingreso: diciembre-2008
Mensajes: 6
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: [APORTE] Expresiones PCRE

Gracias por el Aporte, mu bueno.
  #17 (permalink)  
Antiguo 02/12/2008, 10:59
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 4 meses
Puntos: 34
Respuesta: [APORTE] Expresiones PCRE

Cita:
Iniciado por GatorV Ver Mensaje
De hecho es \w, no es /w.

Saludos.

Así es, error de tipeo


Solucionando es:

Claro, esto:
Código PHP:
$str 'oia.a&$re3';
echo 
preg_replace('/[a-z0-9]/i','-',$str); 
Es lo mismo que esto:
Código PHP:
$str 'oia.a&$re3';
echo 
preg_replace('/[\w]/i','-',$str); 
En ambos casos debería imprimirte "---.-&$---".

Saludos.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #18 (permalink)  
Antiguo 30/12/2008, 20:09
 
Fecha de Ingreso: agosto-2008
Ubicación: Buenos Aires
Mensajes: 247
Antigüedad: 15 años, 8 meses
Puntos: 6
Respuesta: [APORTE] Expresiones PCRE

por lo que lei en http://ar.php.net/manual/es/function.preg-match-all.php

en caso de que se de alguna coinsidencia, un array tendra cada valor que de coinsidencia...
yo quisiera usar esto para validar un texto... mi pregunta es:

como debo ahcer, para validar un texto, el cual puede se a-z A-Z áéíóúÁÉÍÓÚÑñ con esa funcion y poder asignar un valor a una variable si no valida??? pueden darme un ejemplo o idea de como encarar esto???... se los agradeceria... estuve todo el dia codeando y ya a esta hora estoy quemado...

muchas gracias de antemano... y que tengan todos un buen 2009!!!...lol
  #19 (permalink)  
Antiguo 30/12/2008, 20:16
 
Fecha de Ingreso: agosto-2008
Ubicación: Buenos Aires
Mensajes: 247
Antigüedad: 15 años, 8 meses
Puntos: 6
Respuesta: [APORTE] Expresiones PCRE

analizando lo que quiero hacer... no es complicado... es solo que es una funcion que no use nunca..... venia usando eregi o ereg... y con eso me arreglaba... pero con la ñ no se lleva bien.. jeje..

si me quierendar una mano... sere muy agradecido....

saludos...
  #20 (permalink)  
Antiguo 31/12/2008, 06:54
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 4 meses
Puntos: 34
Respuesta: [APORTE] Expresiones PCRE

Deberías usar porque es mejor y es adecuado para el caso que comentar, ereg y no preg. Por que decís que con la ñ no se lleva bien? poné el código que estás usando así vemos de ayudarte sobre lo que estás usando.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #21 (permalink)  
Antiguo 31/12/2008, 08:32
 
Fecha de Ingreso: agosto-2008
Ubicación: Buenos Aires
Mensajes: 247
Antigüedad: 15 años, 8 meses
Puntos: 6
Respuesta: [APORTE] Expresiones PCRE

hola, yo en un principio usaba eregi.... estaba intentando usar:
Código PHP:
<? 

if (!eregi("^[a-zA-ZáéíóúAÉÍÓÚÑñ]+$"$nombre)) 
{
$error .= "-  Nombre \r\n <br>";}

?>
no se si tenga errores ese codogo... a mi me parecia que estaba bien asi.... pero nunca validaba... osea siempre tiraba error...... y en otros caso que no use las tildes ni ñÑ funcionaba pperfecto...
pregunte en el foro y me dijeron
Cita:
eregi no funciona bien con caracteres de latín...
por eso intente usar esta funcion...
ya no se como hacer para arregalar esto... jeje... que me recomiendan....???
alguna idea???? ayuda!


gracias dae antemano...
  #22 (permalink)  
Antiguo 31/12/2008, 10:48
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 4 meses
Puntos: 34
Respuesta: [APORTE] Expresiones PCRE

No comprendo, en estos ejemplos me funciona bien:

Código PHP:
<?php
$nombre 
'Nicolás';
if( !
eregi("^[a-zA-ZáéíóúAÉÍÓÚÑñ]+$"$nombre) ) echo 'Su nombre no es correcto'#No entra, pasa OK

$nombre 'Nicolás';
if( !
eregi("^[a-zA-ZáéíóúAÉÍÓÚÑñ]+$"$nombre) ) echo 'Su nombre no es correcto'#No entra, pasa OK

$nombre 'Nicolás_9';
if( !
eregi("^[a-zA-ZáéíóúAÉÍÓÚÑñ]+$"$nombre) ) echo 'Su nombre no es correcto'#Dará "Su nombre no es correcto"

?>
Con que ejemplo no te funciona y si debería? contanos un poco más con ejemplos donde tenes el problema.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #23 (permalink)  
Antiguo 31/12/2008, 13:48
 
Fecha de Ingreso: noviembre-2008
Mensajes: 371
Antigüedad: 15 años, 4 meses
Puntos: 3
Respuesta: [APORTE] Expresiones PCRE

gRAcias por el aporte muy bueno :D
  #24 (permalink)  
Antiguo 31/12/2008, 14:36
 
Fecha de Ingreso: agosto-2008
Ubicación: Buenos Aires
Mensajes: 247
Antigüedad: 15 años, 8 meses
Puntos: 6
Respuesta: [APORTE] Expresiones PCRE

hola, te muestro el codigo de la validacion:( es una parrte, ya que al no funcionarme el eregi en el primero... lo saque del resto...)

Código PHP:
<?

if (!eregi("^[a-zA-ZáéíóúAÉÍÓÚÑñ]$"$nombre)) 
        {
$error .= "-  Nombre \r\n <br>";}
        
if( 
$apellido == ""){ $error .= "-  Apellido \r\n <br>";}   // (*)
if( $phone == ""){ $error .= "-  Numero de Telefono \r\n <br>";}   // (*)
if( $cel == ""){ $error .= "-  Numero de Celular \r\n <br>";}        // (*)
        
if($comentarios =="" ){$error .= "-  Comentario \r\n <br>";} // (*)
        
if(!eregi("^[_A-Za-z0-9-]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)*(\.[A-Za-z]{2,3})$"$email))
{
$error .= "-  E-mail \r\n <br>";}
        
if(!
$verified) {$error .= "-  Imagen Captcha \r\n <br>";}

//(*) en estos casos faltaria agregarles el eregi como el de nombre y en los telefonos que sean numeros....
// tambien falta agregarle strlen() a todos.... primero queria que funcione solo... jeje

?>

Feliz año nevo a todos...gracias por la ayuda

Última edición por binagol; 31/12/2008 a las 22:18
  #25 (permalink)  
Antiguo 31/12/2008, 22:20
 
Fecha de Ingreso: agosto-2008
Ubicación: Buenos Aires
Mensajes: 247
Antigüedad: 15 años, 8 meses
Puntos: 6
Respuesta: [APORTE] Expresiones PCRE

alguna idea de por que falla mi codigo???
como lo puedo llefgar a solucionar????


Muchas gracias porla ayuda!!!
  #26 (permalink)  
Antiguo 01/01/2009, 08:51
 
Fecha de Ingreso: agosto-2008
Ubicación: Buenos Aires
Mensajes: 247
Antigüedad: 15 años, 8 meses
Puntos: 6
Respuesta: [APORTE] Expresiones PCRE

hola, decidi probar la validacion.... borrando todo menos la validacion del nombre.

de modo tal, que la parte de la validacion, me quedo:

Código PHP:
<?

if (!eregi ("^[a-zA-ZáéíóúAÉÍÓÚÑñ]+$"$nombre)) 
$error .= "-  Nombre \r\n <br>"};

?>


no se porque, lo que a vos te funciono a mi me devuelve error..... me podran ayudar???

gracias

Última edición por binagol; 23/01/2009 a las 19:53
  #27 (permalink)  
Antiguo 02/01/2009, 07:53
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 4 meses
Puntos: 34
Respuesta: [APORTE] Expresiones PCRE

Donde seteas a la variable $nombre?


PD: Algún admin, puede cortar esto en un nuevo tema?
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #28 (permalink)  
Antiguo 02/01/2009, 08:22
 
Fecha de Ingreso: agosto-2008
Ubicación: Buenos Aires
Mensajes: 247
Antigüedad: 15 años, 8 meses
Puntos: 6
Respuesta: [APORTE] Expresiones PCRE

ya habia hecho un tema hasta que me mandaron para aca.... y pregunte aca....

te ofresco que lo sigamos en:
http://www.forosdelweb.com/f18/eregi...simple-657529/
que seria donde corresponde...


PS... algun admin puede mover esto a:
http://www.forosdelweb.com/f18/eregi...simple-657529/
ya que esta repetido.... disculpen.
  #29 (permalink)  
Antiguo 02/01/2009, 08:29
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: [APORTE] Expresiones PCRE

Cita:
Iniciado por binagol Ver Mensaje
ya habia hecho un tema hasta que me mandaron para aca.... y pregunte aca....

si, te mandaron hacia acá... pero no para usar el tema, sino para que leyeras del aporte de PCRE ...

__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #30 (permalink)  
Antiguo 02/01/2009, 08:32
 
Fecha de Ingreso: agosto-2008
Ubicación: Buenos Aires
Mensajes: 247
Antigüedad: 15 años, 8 meses
Puntos: 6
Respuesta: [APORTE] Expresiones PCRE

estamos de acuerdo, ya pedi disculpas por usar este tema inapropiadamente....
y si algun admin quiere... que borre o mueva los post que no corresponden....

Saludos... y disculpas nuevamente... no quise molestar a nadie...jeje
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.
Tema Cerrado

SíEste tema le ha gustado a 4 personas




La zona horaria es GMT -6. Ahora son las 17:16.