Java与Android正则表达式的区别

Red*_*nda 7 java regex android

美好的一天!我有一个正则表达式模式:

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

它应该告诉我java/android包名是否合法.它在桌面java上工作正常,但它在Android设备上失败

可以说我有一些包名:

 ". .", "?????????????", "com.mxtech.ffmpeg.v7_neon", ...
Run Code Online (Sandbox Code Playgroud)

测试应该显示唯一有效的包是"com.mxtech.ffmpeg.v7_neon",但也显示测试字符串

" _?????????????\_ "
Run Code Online (Sandbox Code Playgroud)

已验证.为什么?(这是西里尔文.)

Android和桌面实现有什么区别?

Wik*_*żew 9

问题是由于\wAndroid正则表达式具有Unicode感知.

替换[A-Za-z0-9_]为仅匹配ASCII字母,数字和下划线.

查看Android Pattern参考:

请注意,这些内置类不仅涵盖传统的ASCII范围.例如,\w等同于字符类[\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}].如果您确实只想匹配ASCII字符,请指定所需的显式字符.