2016-03-02 105 views
7

美好的一天! 我有一个正则表达式模式:Java和Android的正则表达式差异

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和桌面实现有什么区别?

回答

9

该问题是由于Android正则表达式中的\w支持Unicode。

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

Android Pattern reference

注意,这些内置类不只是涵盖传统的ASCII范围。例如,\w相当于字符类[\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}]如果您实际上只想匹配ASCII字符,请指定您想要的显式字符

+0

啊......不知道。 – Rohit5k2