gpt4 book ai didi

Java 和 Android 正则表达式的区别

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:24:52 25 4
gpt4 key购买 nike

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

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

最佳答案

问题是由于 Android 正则表达式中的 \w 是 Unicode 识别的。

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

参见 Android Pattern reference :

Note that these built-in classes don't just cover the traditional ASCII range. For example, \w is equivalent to the character class [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}]. If you actually want to match only ASCII characters, specify the explicit characters you want.

关于Java 和 Android 正则表达式的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35750922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com