Aquí está la versión de expresiones regulares de una sola línea:
System.out.println(Arrays.toString(
"Thequickbrownfoxjumps".split("(?<=\\G.{4})")
));
\G
es una afirmación de anchura cero que coincide con la posición en la que terminó el partido anterior. Si hay era sin coincidencia previa, coincide con el comienzo de la entrada, el mismo que \A
. El aspecto subyacente coincide con la posición de cuatro caracteres a lo largo del final del último partido.
Tanto lookbehind como \G
son funciones avanzadas de regex, no compatibles con todos los sabores. Además, \G
no se implementa consistentemente en los sabores que sí lo admiten. Este truco funcionará (por ejemplo) en Java, Perl, .NET y JGSoft, pero no en PHP (PCRE), Ruby 1.9+ o TextMate (ambos Oniguruma). El /y
de JavaScript (bandera adhesiva) no es tan flexible como \G
, y no se pudo usar de esta manera, incluso si JS sí admitía lookbehind.
Debo mencionar que no necesariamente recomiendo esta solución si tiene otras opciones. Las soluciones no-regex en las otras respuestas pueden ser más largas, pero también son auto-documentadas; este es solo el frente a de eso. ;)
Además, esto no funciona en Android, que no admite el uso de \G
en lookbehinds.
¿Qué has probado? ¿Por qué eso no funcionó? – Thilo
¿Necesita usar una expresión regular para esto? Solo preguntando por la etiqueta de expresión regular ... –
El enlace de @Thilo que publicó es para Scala, él pregunta por lo mismo en Java –