Puedo confirmar que esto arroja un PatternSyntaxException
cuando se ejecuta en el emulador de Android, pero no en una aplicación Java normal. No puedo ver por qué ese sería el caso, aparte del hecho de que la implementación de expresión regular utilizada en Android es diferente a la del SDK de Java normal. De la página de Pattern Desarrolladores de Android:
La implementación de expresiones regulares utilizada en Android es proporcionada por la ICU. La notación para las expresiones regulares es principalmente un superconjunto de los utilizados en otras implementaciones de lenguaje Java. Esto significa que las aplicaciones existentes normalmente funcionarán como se espera, pero en casos excepcionales, Android puede aceptar una expresión regular que no sea aceptada por otras implementaciones.
Como solución alternativa, descubrí que puede evitar la excepción al adjuntar la afirmación de límite de palabras en un grupo que no captura.
Pattern.compile("(?:\\b)?");
(Un grupo de captura funciona tan bien, pero dudo que lo necesite.)
Te sugiero report this as a bug para ver si puede obtener una respuesta oficial. (Ya he buscado, y no parece que se haya informado aún)
No sé la motivación del error ... pero este es un límite de palabra opcional (y sin embargo de longitud cero) ... ¿qué eres? va a coincidir después de todo? – Gabber
Bueno, es una expresión regular bastante complicada de un proyecto diferente. Pero no veo por qué un límite de palabra opcional debería ser una sintaxis de patrón no válida. – Tentux