Diferencia de regex de Java y Android

¡Buen día! Tengo un patrón regex:

Pattern p = Pattern.compile("^[a-zA-Z_\\$][\\w\\$]*(?:\\.[a-zA-Z_\\$][\\w\\$]*)*$"); 

Debería decirme si el nombre del paquete java / android es legal o no. Funciona bien en escritorio java, pero falla en los dispositivos Android

Digamos que tengo algunos nombres de paquetes:

  ". .", "ПАвыапЫВАПыва", "com.mxtech.ffmpeg.v7_neon", ... 

La prueba debe mostrar que el único paquete válido es "com.mxtech.ffmpeg.v7_neon", pero también muestra que la cadena de prueba

 " _ПАвыапЫВАПыва\_ " 

es válida. ¿Por qué? (Es cirílico.)

¿Cuál es la diferencia entre las realizaciones de Android y Desktop?

El problema es causado por el hecho de que \w en Android regex es Unicode consciente.

Reemplazar con [A-Za-z0-9_] para que coincidan sólo con letras ASCII, dígitos y un guión bajo.

Consulte la referencia de Pattern Android :

Tenga en cuenta que estas clases incorporadas no sólo cubren el rango ASCII tradicional. Por ejemplo, \w es equivalente a la clase de caracteres [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}] . Si realmente desea coincidir sólo con caracteres ASCII, especifique los caracteres explícitos que desea .

  • Manejo de spoiler BBcode Android
  • Android / Java regex match Más signo
  • División de una cadena en Java lanza PatternSyntaxException
  • Cómo ejecutar una consulta con regexp en Android
  • Necesito una consulta SQL para encontrar todas las palabras que puede hacer con un conjunto de letras, incluyendo hasta dos fichas en blanco
  • Regex palabra entera
  • Cómo analizar valores float de cadena utilizando REGEX en java
  • Detectar subrogados altos en una cadena utilizando expresiones regulares
  • Excluir etiquetas HTML y algunos caracteres UNICODE mientras busca en SQLite
  • Validar cadena con regex en android
  • Cómo validar el formato de número de teléfono
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.