Llevo un rato jugando con una expresión regular para extraer de un
string cierta información. Como casi siempre los dos problemas
principlaes son
1) Las agrupaciones
2) Obtener la primera aparición del patrón y que ésta solo
contenga la parte que nos interesa
En este caso la expresión queda como sigue:
Pattern pattern = Pattern.compile(".*\/apps\/copy_(.*?)\/(.*\/){0,1}.*\..*");
Que nos permite recoger el texto que está entre copy_ y la siguiente
barra del siete "/" y también nos permite recoger, si existe
el resto del path que no es nombre de fichero y extensión. Por ejemplo
en el siguiente path
/esto/es/el/path/apps/copy_codigo/nuevo/path/con/mas/niveles/fichero.txt
nos gustaría obtener del grupo 1 el valor codigo y
del grupo 2 nuevo/path/con/mas/niveles
y del siguiente path:
/esto/es/el/path/apps/copy_codigo/fichero.txt
nos gustaría obtener del grupo 1 el valor codigo y
del grupo 2 null
Con la expresión regular descrita se consigue lo comentado y los dos
puntos a tener en cuenta son
el ? después del * que nos
permite que la expresión se ajuste a la primera aparición y no a la
última y el {0,1} que nos permite indicar que el
elemento tiene que aparecer una o ninguna vez.