Ver Mensaje Individual
  #5 (permalink)  
Antiguo 30/08/2009, 18:22
ZequeZ
 
Fecha de Ingreso: mayo-2008
Ubicación: En la guarida del mal, tratando de conquistar el mundo
Mensajes: 174
Antigüedad: 16 años
Puntos: 2
Respuesta: Expresión regular: <tag>Contenido</tag>, no me funciona :S

Cita:
Iniciado por zerokilled Ver Mensaje
te comprendo! yo estuve unos años sin entender el concepto hasta que un dia me canse e investigue. mi interpretacion era parecida a la tuya, pensaba algo como opcionalmente repetir el patron. para poder entenderlo no puedes separar las partes. ponlo de esta forma, el signo ? es una modificacion al repetidor *, de la misma forma que un elemento contiene atributos para modificar ciertas caracteristicas o un comando puede tener argumentos para llevar a cabo tareas mas especificas.

¿como funciona? bien simple! la mejor manera de ilustrarlo es con ejemplo. supongo que tenemos una serie de numeros que puede ser variable, por ejemplo "0123456789876543210". con expresion regulares podemos atraparlo con /\d+/. pero ahora digamos que solo quieres buscar hasta el primer "4" en la cifra. probablemente pienses que la solucion es /\d+4/. te llevaras una sorpresa porque el resultado devuelto es "012345678987654" cuando realmente lo que te interesa es la parte en negrita. como ya se habia explicado antes, sucede que los repetidores (*, +) son codiciosos, ellos intentan capturar todas las alternativas posibles con la expresion dada. la repuesta a este asunto es utilizar el ? para indicarle que solo busque lo necesario. por tanto /\d+?4/ devuelve "01234".

por otro lado, recuerda que el repetidor repite la expresion anterior. en este caso es \d que significa cualquier digito. en este caso particular, la razon por la que la expresion sin el ? recoge todas las alternativas posibles es porque el "4" forma parte de la clase \d. para hacerlo mas ilustrado, las expresiones evaluan de la siguiente forma:

/\d+4/
0123456789876543210

/\d+?4/
0123456789876543210
Muchas gracias, ahora entendí, muy bien explicado :P
Perdon por no responder antes, pero no estube en mi casa xD.