Siempre los estoy intentando evitar porque no los conocía pero hoy me veo con la necesidad y me puse manos a la obra por la mañana primero a leer la documentación disponible y varios tutoriales y aún así no consigo realizar lo que quiero.
Partiendo de este string:
Código PHP:
Ver original
/*Siempre empieza por un caracter seguido de un numero, seguido de moto o urba, luego una fecha, luego un _ para separar y un número más*/ $cadena = 'a623moto20130122_8633.pdf';
Lo que no acabo de entender del todo es... que parte le digo que quiero que me devuelva? Yo pongo un patrón y el busca ese patrón, pero yo quiero que de ese patrón me devuelva una parte en concreto. No se, no entiendo muy bien el sistema. He llegado hasta aquí:
Código PHP:
Ver original
Pero no logro lo que quiero. Estoy intentando sacar lo que hay entre moto y _ teniendo en cuenta que antes siempre tiene que poner o moto o urba. Pero no hay manera.
Normalmente uso strlen+strpos+substr pero esta vez lo necesito usar si o si.
Modificando por
Código PHP:
Ver original
Me funciona mejor, me devuelve en uno de los índices del array lo que quiero. Pero por qué me muestra más cosas?
Por último yo entendí que preg_match sería la solución, pero me devuelve moto. ¿Como especifico lo que quiero que me devuelva?
Código PHP:
Creo que ahí es donde está mi error.Ver original
Actualización:
He visto que se pueden dar nombres a los ambitos de los paréntesis así que creo que con una sola preg_match podría sacar todo lo que quiero, el problema es que me sigue devolviendo un array vacío y no se qué hago mal. Aunque voy aprendiendo cosas eso sí. La cosa va así:
Código PHP:
Ver original
$fichero = "a623moto20130122_8633.pdf"; preg_match('/^(?<serie>[a-z]|[A-Z])(?<empresa>moto|urba)(?<fecha>[0-9]+)_(?<clacli>[0-9]+)\.pdf$/i', $fichero, $coincidencias); //array vacío :(
Solucionado:
Código PHP:
Ver original
preg_match('/(?<serie>[a-z]|[A-Z])(?<factura>\d+)(?<empresa>moto|urba)(?<fecha_factura>\d+)_(?<cliente>\d+)(?<extension>\.pdf)$/', $fichero, $coincidencias);
Buff al final ha salido y aprendí muchísimo de expresiones regulares.
Un saludo.