Java和Android正则表达式的区别

7

好的,你好!我有一个正则表达式模式:

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

我希望它能告诉我Java/Android软件包名称是否合法。在桌面Java上运行良好,但在Android设备上失败。

假设我有一些软件包名称:

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

测试应该表明唯一有效的软件包是"com.mxtech.ffmpeg.v7_neon",但也显示了测试字符串。
" _ПАвыапЫВАПыва\_ "

是有效的。为什么?(它是西里尔文。)

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

1个回答

9
该问题的原因是Android正则表达式中的\w是Unicode感知的。
请使用[A-Za-z0-9_]代替,以仅匹配ASCII字母、数字和下划线。
参见Android Pattern 参考文档

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


啊...不知道。 - Rohit5k2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接