Expresiones regulares avanzadas en java

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.

00

More Blog Entries

0 Comments