6

Android プラットフォーム 2.2.3 を対象とする場合、正規表現に問題があります。

次の正規表現は、デスクトップ上の Java VM を対象とする場合に機能し、正規表現は .NET アプリケーションでも機能します。

Pattern.compile("\\b?")

しかし、自分の電話をターゲットにすると、PatternSyntaxException が発生します。何か案は?

4

1 に答える 1

4

PatternSyntaxExceptionAndroid エミュレーターで実行するとスローされることを確認できますが、通常の Java アプリケーションではスローされません。Android で使用される正規表現の実装が通常の Java SDK とは異なるという事実を除けば、なぜそうなるのかわかりません。Pattern Android Developers ページから:

Android で使用される正規表現の実装は、ICU によって提供されます。正規表現の表記は、ほとんどが他の Java 言語実装で使用されるもののスーパーセットです。これは、既存のアプリケーションが通常期待どおりに動作することを意味しますが、まれに、他の実装では受け入れられない正規表現を Android が受け入れる場合があります。

回避策として、単語境界アサーションを非キャプチャ グループで囲むことにより、例外を回避できることを発見しました。

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

(キャプチャ グループも同様に機能しますが、必要があるとは思えません。)

これをバグとして報告して、正式な回答が得られるかどうかを確認することをお勧めします。(調べてみましたが、まだ報告されていないようです。)

于 2012-10-03T23:58:11.503 に答える