6

针对 Android 平台 2.2.3 时,我遇到了正则表达式的问题。

以下正则表达式适用于我桌面上的 Java VM,并且正则表达式也适用于 .NET 应用程序。

Pattern.compile("\\b?")

但是当我瞄准我的手机时,我得到了一个 PatternSyntaxException。有任何想法吗?

4

1 回答 1

4

我可以确认这PatternSyntaxException在 Android 模拟器中运行时确实会抛出 a,但在常规 Java 应用程序中则不会。我不明白为什么会这样,除了 Android 中使用的正则表达式实现与普通 Java SDK 不同。从Pattern Android Developers 页面:

Android 中使用的正则表达式实现由 ICU 提供。正则表达式的符号主要是其他 Java 语言实现中使用的符号的超集。这意味着现有应用程序通常会按预期工作,但在极少数情况下,Android 可能会接受其他实现不接受的正则表达式。

作为一种解决方法,我确实发现您可以通过将单词边界断言包含在非捕获组中来绕过异常。

Pattern.compile("(?:\\b)?");

(捕获组也可以,但我怀疑你需要它。)

我建议您将此报告为错误,看看您是否可以获得官方回复。(我已经搜过了,好像还没有报道。)

于 2012-10-03T23:58:11.503 回答