Foros del Web » Programando para Internet » PHP »

Duda con metacaracter * avaricia - php perl

Estas en el tema de Duda con metacaracter * avaricia - php perl en el foro de PHP en Foros del Web. Hola a todos, estoy estudiando por mi cuenta y me he clavado en un punto, no logro darme cuenta. data.txt: Mama Bear 702 Steve Blenheim ...
  #1 (permalink)  
Antiguo 17/02/2011, 12:32
 
Fecha de Ingreso: mayo-2010
Mensajes: 84
Antigüedad: 13 años, 9 meses
Puntos: 6
Duda con metacaracter * avaricia - php perl

Hola a todos, estoy estudiando por mi cuenta y me he clavado en un punto, no logro darme cuenta.

data.txt:
Mama Bear 702
Steve Blenheim 100
Betty Boop 200
Igor Chevsky 313
Norma Cord 400
Jon DeLoach 500
Karen Evich 600
BB Kingson 803


ej1:
Código PHP:
<pre>
<?php

  $fh
=fopen("data.txt""r");
  while( ! 
feof($fh)){
    
$text fgets($fh);
    if(
preg_match("/B[a-z]*/",$text)){
       echo 
"$text";
    }
  }

?>
-Resultado ej1:
Mama Bear 702
Steve Blenheim 100
Betty Boop 200
BB Kingson 803


ej2:
Código PHP:
<pre>
<?php

  $fh
=fopen("data.txt""r");
  while( ! 
feof($fh)){
    
$text fgets($fh);
    if(
preg_match("/^[A-Z][a-z]*\s[A-Z][a-z]*\s/",$text)){
        echo 
"$text";
    }
  }

?>
-Resultado ej2:
Mama Bear 702
Steve Blenheim 100
Betty Boop 200
Igor Chevsky 313
Norma Cord 400
Karen Evich 600

*No entiendo como el ej1 imprime el BB Kingson 803 cuando BB esta seguido por una B mayúscula y el ej2 no imprime el Jon DeLoach 500 y BB Kingson 803. El libro dice que el metacaracter "*" hace que se repitan 0 a más elementos del digito anterior.
Entonces si "/B[a-z]*/" imprime BB Kingson 803 porque "/^[A-Z][a-z]*\s[A-Z][a-z]*\s/" no imprime Jon DeLoach 500 y BB Kingson 803?

Ojala puedan responder.
Un saludo gente.
  #2 (permalink)  
Antiguo 17/02/2011, 12:44
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 15 años, 11 meses
Puntos: 2534
Respuesta: Duda con metacaracter * avaricia - php perl

bueno, en si que trates tu problema como asunto de php esta mal... ya que las expresiones regulares son un lenguaje muy distinto, y dicho así deberías investigar y leer referencia de expresiones compatibles con perl...

te invito a leer lo siguiente:
http://www.forosdelweb.com/f18/aport...s-pcre-646110/
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 17/02/2011, 13:01
 
Fecha de Ingreso: mayo-2010
Mensajes: 84
Antigüedad: 13 años, 9 meses
Puntos: 6
Respuesta: Duda con metacaracter * avaricia - php perl

Cita:
Iniciado por pateketrueke Ver Mensaje
bueno, en si que trates tu problema como asunto de php esta mal... ya que las expresiones regulares son un lenguaje muy distinto, y dicho así deberías investigar y leer referencia de expresiones compatibles con perl...

te invito a leer lo siguiente:
[url]http://www.forosdelweb.com/f18/aporte-expresiones-pcre-646110/[/url]


Muchas gracias.

Ya pude entender el por qué.

SOLUCIONADO.
  #4 (permalink)  
Antiguo 17/02/2011, 13:02
Avatar de DeeR  
Fecha de Ingreso: diciembre-2003
Ubicación: Santiago
Mensajes: 520
Antigüedad: 20 años, 3 meses
Puntos: 17
Respuesta: Duda con metacaracter * avaricia - php perl

Pregunta 1:

El meta caracter * hace que la expresión anterior se repite 0 o más veces, por lo tanto tu expresión regular /B[a-z]*/ para el string "BB Kingson 803" si cumple, ya que cumple con el patrón

- tiene la B mayusculas
- luego de la B, la expresión [a-z] calza 0 veces, por lo cumple ya que tiene el *

Ahora si quieres, que [a-z] se cumple una vez o más veces, debes usar el meta caracter +

Respecto a la pregunta 2, no tengo mucho tiempo para analizar :P tal vez más rato xD
  #5 (permalink)  
Antiguo 17/02/2011, 13:08
 
Fecha de Ingreso: mayo-2010
Mensajes: 84
Antigüedad: 13 años, 9 meses
Puntos: 6
Respuesta: Duda con metacaracter * avaricia - php perl

Cita:
Iniciado por DeeR Ver Mensaje
Pregunta 1:

El meta caracter * hace que la expresión anterior se repite 0 o más veces, por lo tanto tu expresión regular /B[a-z]*/ para el string "BB Kingson 803" si cumple, ya que cumple con el patrón

- tiene la B mayusculas
- luego de la B, la expresión [a-z] calza 0 veces, por lo cumple ya que tiene el *

Ahora si quieres, que [a-z] se cumple una vez o más veces, debes usar el meta caracter +

Respecto a la pregunta 2, no tengo mucho tiempo para analizar :P tal vez más rato xD
jajajaja, no te preocuper DeeR ya lo entendí :D, gracias tío de todas maneras un saludo.

Etiquetas: perl
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 00:20.