elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Verificar y recolectar valor de expresion regular
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Verificar y recolectar valor de expresion regular  (Leído 1,446 veces)
Shell Root
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.708


WOS & Khan & Calero LDN


Ver Perfil WWW
Verificar y recolectar valor de expresion regular
« en: 29 Mayo 2010, 16:42 pm »

Bueno, lo que quiero hacer es algo así. Tengo como cadena la siguiente:
Código
  1. :sh:Todavía tenemos posibilidades de clasificarnos, es :sh:difícil,
  2. el panorama :sh:está complicado, pero en eso nos basamos,
  3. :sh:todavía estamos en la Copa :sh:América y queremos quedarnos

Y tengo la siguiente expresión regular. (Un poco loca, pero funciona)
Código
  1. /:sh:\w*/

Lo que hace es validar así:
Código
  1. :sh:Todav
  2. :sh:dif
  3. :sh:est
  4. :sh:todav
  5. :sh:Am

Lo hace correctamente, pero como hago para recolectar la información que está después de la expresión regular?, es decir, hago esto para intentar hacer lo que quiero, pero solo me toma sh, quisiera recolectar todo lo que cumple la expresión regular. Como los anteriores.

Código:
Código
  1. $txt = ":sh:Todavía tenemos posibilidades de clasificarnos, es :sh:difícil,
  2. el panorama :sh:está complicado, pero en eso nos basamos,
  3. :sh:todavía estamos en la Copa :sh:América y queremos quedarnos";
  4. preg_match_all("/:sh:\w*/", $txt, $captura, PREG_SET_ORDER);
  5. foreach ($captura as $salida){
  6. echo $salida[1];
  7. echo "\n";
  8. }
Resultado:
Código
  1. shellroot@alex-laptop:~/Escritorio$ php PoC.php
  2. sh
  3. sh
  4. sh
  5. sh
  6. sh


Edit: Estaba mirando el código de yoyahack y no se porque puso $salida[1], era $salida[0]. :S Perdón por el POST!
Código
  1. shellroot@alex-laptop:~/Escritorio$ php PoC.php
  2. :sh:Todav
  3. :sh:dif
  4. :sh:est
  5. :sh:todav
  6. :sh:Am


« Última modificación: 29 Mayo 2010, 16:45 pm por Alex@ShellRoot » En línea

Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.
~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 1.125



Ver Perfil
Re: Verificar y recolectar valor de expresion regular
« Respuesta #1 en: 29 Mayo 2010, 18:15 pm »

Si usas
  • te responde las coincidencias de todos los patrones, y si usas [1],[2], son los patrones que están entre paracentesis....

Si te fijas que cuando ejecutaste el script el resultado fue:
Código
  1. shellroot@alex-laptop:~/Escritorio$ php PoC.php
  2. :sh:Todav
  3. :sh:dif
  4. :sh:est
  5. :sh:todav
  6. :sh:Am
Usas la meta secuencia \w, que sirve para todos los carácter alfa-numérico pero si te fijas que después de
Todav sigue una í acentuada, no pertenece en tu caso a los carácter alfa-numérico debido al juego de carácter predeterminado que tienes en php...

Puedes hacer muchas cosas, pero las tres primera cosa que se me ocurrieron fueron:
  • Cambiar el juego de carácter.
  • Capturar todo excepto :sh:.
  • Cambiar los carácter acentuados a carácter normales.
  • Eliminar el :sh: de la cadena.

Bueno, para agilizar el proceso, pase a usar la tercera opción... Este es el código que hice:
Código
  1. <?php
  2. $txt = ":sh:Todavia tenemos posibilidades de clasificarnos, es :sh:dificil,
  3. el panorama :sh:esta complicado, pero en eso nos basamos,
  4. :sh:todavia estamos en la Copa :sh:America y queremos quedarnos";
  5. preg_match_all("/:sh:([a-z\s\,]+)/i", $txt, $captura, PREG_SET_ORDER);
  6.  
  7. foreach ($captura as $salida) {
  8. echo $salida[1];
  9. echo "\n";
  10. }
  11. ?>

Salida:
Código
  1. yoya@Yoya-desktop:~/Escritorio$ php a.php
  2. Todavia tenemos posibilidades de clasificarnos, es
  3. dificil,
  4. el panorama
  5. esta complicado, pero en eso nos basamos,
  6.  
  7. todavia estamos en la Copa
  8. America y queremos quedarnos

Bueno, explico la expresión regular:
Código:
([a-z\s\,]+)
uso los corchete para agrupar...
Código:
a-z -> Desde la a hasta la z, aceptamos.
\s -> Aceptamos espacio en blanco.
\, -> Aceptamos la coma.

Y al final uso el operador i para no distinga entre mayúscula y minúscula ( No case sensitive)

Saludos.


En línea

Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.
Shell Root
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.708


WOS & Khan & Calero LDN


Ver Perfil WWW
Re: Verificar y recolectar valor de expresion regular
« Respuesta #2 en: 29 Mayo 2010, 18:50 pm »

Thanks!, pero como había dicho, hice la ExpReg, de acuerdo a lo que necesitaba, y necesitaba que se mostrará el contenido anterior a la tilde y que al inicio tuviese :sh: :P
En línea

Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con Expresión Regular
Desarrollo Web
Shell Root 4 3,167 Último mensaje 10 Abril 2011, 22:26 pm
por Shell Root
Aplicar expresión regular en el resultado de un curl
PHP
Servia 3 2,884 Último mensaje 28 Agosto 2011, 14:11 pm
por WHK
Expresión regular email
PHP
Littl3 1 2,197 Último mensaje 20 Septiembre 2011, 23:06 pm
por ~ Yoya ~
Expresion regular en Perl « 1 2 »
Scripting
bdoX 17 7,244 Último mensaje 16 Enero 2012, 16:30 pm
por explorer
expresión regular que sustituye una palabra por el valor de una variable
Desarrollo Web
Diesan Romero 3 711 Último mensaje 19 Julio 2018, 07:10 am
por srWhiteSkull
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines