Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Capturar numero despues de cadena con expresiones regulares

Estas en el tema de Capturar numero despues de cadena con expresiones regulares en el foro de PHP en Foros del Web. Hola! Necesito capturar un numero que esta en una url pero sólo capturar el numero que viene despues de una cadena, y no el resto ...
  #1 (permalink)  
Antiguo 23/12/2016, 05:26
Avatar de dryant  
Fecha de Ingreso: agosto-2009
Ubicación: Malaga, Ceuta, España....
Mensajes: 283
Antigüedad: 14 años, 8 meses
Puntos: 10
Capturar numero despues de cadena con expresiones regulares

Hola!
Necesito capturar un numero que esta en una url pero sólo capturar el numero que viene despues de una cadena, y no el resto que pueda haber después.
Es decir, de las cadenas siguiente:
Código:
http://fotos-album-id-3397-fecha-20161205-img1.jpg
http://fotos-album-id-12107-fecha-20150905-img145.jpg
debería capturar los numeros:
Código:
3397
12107
pero no debería capturar los numeros
Código:
20161205
20150905
ni tampoco capturar
Cita:
1
145
Los numeros a caputrar siempre siguen el mismo patrón
vienen detras de fotos-album-id- y terminan con el guión -

Lo que yo he intentado y que no funciona es esto:
Código PHP:
(?:fotos-album-id-)([0-9]+) 
para que no me capture ese grupo y si el del numero, pero me lo captura todo...
Como sería esto con una expresion regular?
__________________
Tecnología y tutoriales
  #2 (permalink)  
Antiguo 23/12/2016, 05:58
Avatar de Rodrhigo  
Fecha de Ingreso: septiembre-2011
Ubicación: Temuco-Valdivia-Osorno
Mensajes: 254
Antigüedad: 12 años, 7 meses
Puntos: 48
Respuesta: Capturar numero despues de cadena con expresiones regulares

Código PHP:
Ver original
  1. $texto = "http://fotos-album-id-3397-fecha-20161205-img1.jpg
  2. http://fotos-album-id-12107-fecha-20150905-img145.jpg";
  3.  
  4. preg_match_all( "@fotos\-album\-id\-([0-9]+)\-@",$texto , $coincidencias );
  5. foreach($coincidencias[1] as $valor) echo $valor."<br>".PHP_EOL;
  6.  
  7. print_r($coincidencias);
__________________
Rodrigo Agüero
  #3 (permalink)  
Antiguo 23/12/2016, 06:18
 
Fecha de Ingreso: noviembre-2015
Mensajes: 231
Antigüedad: 8 años, 5 meses
Puntos: 86
Respuesta: Capturar numero despues de cadena con expresiones regulares

No es algo que controle demasiado. Puedes trabajar con non-greedy
Código PHP:
Ver original
  1. /([0-9]*?)-/;
  #4 (permalink)  
Antiguo 24/12/2016, 06:06
Avatar de dryant  
Fecha de Ingreso: agosto-2009
Ubicación: Malaga, Ceuta, España....
Mensajes: 283
Antigüedad: 14 años, 8 meses
Puntos: 10
Respuesta: Capturar numero despues de cadena con expresiones regulares

Cita:
Iniciado por Rodrhigo Ver Mensaje
Código PHP:
Ver original
  1. $texto = "http://fotos-album-id-3397-fecha-20161205-img1.jpg
  2. http://fotos-album-id-12107-fecha-20150905-img145.jpg";
  3.  
  4. preg_match_all( "@fotos\-album\-id\-([0-9]+)\-@",$texto , $coincidencias );
  5. foreach($coincidencias[1] as $valor) echo $valor."<br>".PHP_EOL;
  6.  
  7. print_r($coincidencias);
Gracias de nuevo, me h funcionado perfectamente, pero hay algo que no entiendo... porque pones coincidencias[1]?
__________________
Tecnología y tutoriales
  #5 (permalink)  
Antiguo 24/12/2016, 09:35
Avatar de Rodrhigo  
Fecha de Ingreso: septiembre-2011
Ubicación: Temuco-Valdivia-Osorno
Mensajes: 254
Antigüedad: 12 años, 7 meses
Puntos: 48
Respuesta: Capturar numero despues de cadena con expresiones regulares

$Coincidencias[0] almacena el valor de todo lo encontrado, a partir de $coincidencia[1] obtienes el valor capturado de los paréntesis.

$coincidencias[1] = ([0-9]+)

Si tienes muchos paréntesis para capturar un tercer conjunto(ejemplo) de coincidencias seria así.
$coincidencia[0][2] --> Todo lo capturado(0) para un Tercer conjunto de coincidencias(2)
$coincidencia[1][2] --> Primer paréntesis de lo que se encontró en el tercer conjunto.
$coincidencia[2][2] --> Segundo paréntesis de lo que se encontró en el tercer conjunto.

Si usas más de un paréntesis te recomiendo usar la bandera PREG_SET_ORDER que almacena todo un conjunto en el primer Array así:
$coincidencia[2][0] --> Todo lo capturado para el conjunto 3
$coincidencia[2][1] --> Primer paréntesis conjunto 3
$coincidencia[2][2] --> Segundo paréntesis conjunto 3

Es más ordenado :P
http://php.net/manual/es/function.preg-match-all.php
__________________
Rodrigo Agüero
  #6 (permalink)  
Antiguo 24/12/2016, 12:09
Avatar de dryant  
Fecha de Ingreso: agosto-2009
Ubicación: Malaga, Ceuta, España....
Mensajes: 283
Antigüedad: 14 años, 8 meses
Puntos: 10
Respuesta: Capturar numero despues de cadena con expresiones regulares

Cita:
Iniciado por Rodrhigo Ver Mensaje
$Coincidencias[0] almacena el valor de todo lo encontrado, a partir de $coincidencia[1] obtienes el valor capturado de los paréntesis.

$coincidencias[1] = ([0-9]+)

Si tienes muchos paréntesis para capturar un tercer conjunto(ejemplo) de coincidencias seria así.
$coincidencia[0][2] --> Todo lo capturado(0) para un Tercer conjunto de coincidencias(2)
$coincidencia[1][2] --> Primer paréntesis de lo que se encontró en el tercer conjunto.
$coincidencia[2][2] --> Segundo paréntesis de lo que se encontró en el tercer conjunto.

Si usas más de un paréntesis te recomiendo usar la bandera PREG_SET_ORDER que almacena todo un conjunto en el primer Array así:
$coincidencia[2][0] --> Todo lo capturado para el conjunto 3
$coincidencia[2][1] --> Primer paréntesis conjunto 3
$coincidencia[2][2] --> Segundo paréntesis conjunto 3

Es más ordenado :P
http://php.net/manual/es/function.preg-match-all.php
Muchísimas gracias!!! Tu explicación ha sido clarísima!
Y había leído y releído la pagina de php.net, pero seguía sin entenderlo.... Ahora con tu explicación me ha quedado totalmente Claro.
Gracias y feliz navidad!
__________________
Tecnología y tutoriales

Etiquetas: cadena, expresiones, numero, regulares
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:29.