Android可选字边界正则表达式

时间:2012-10-03 22:01:50

标签: android regex patternsyntaxexception

我在定位Android平台2.2.3时遇到正则表达式问题。

以下正则表达式在我的桌面上定位Java VM时起作用,而正则表达式也在.NET应用程序上工作。

Pattern.compile("\\b?")

但是当我瞄准手机时,我得到一个PatternSyntaxException。有什么想法吗?

1 个答案:

答案 0 :(得分:4)

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

  

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

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

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

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

我建议你report this as a bug看看你是否能得到官方回复。 (我已经搜索过了,但似乎还没有报道。)