【问题标题】:Java and Android regex differenceJava和Android正则表达式的区别
【发布时间】:2016-06-15 12:35:10
【问题描述】:

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

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

【问题讨论】:

    标签: java android regex


    【解决方案1】:

    这个问题是由于 Android 正则表达式中的 \w 是 Unicode 感知的。

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

    Android Pattern reference

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

    【讨论】:

    • 啊...不知道。
    猜你喜欢
    • 1970-01-01
    • 2016-11-18
    • 2012-02-22
    • 2023-04-07
    • 2021-10-01
    • 2016-03-12
    • 2012-06-01
    • 2013-09-18
    • 2012-12-31
    相关资源
    最近更新 更多