2015-01-08 10 views
6

私は日食に8+アンドロイドでアンドロイドJavaの正規表現という名前のグループが

matcher.group("login"); 

を使用したいが、ないMatcher.group(文字列)が存在していないようにみえます。 (組み込み)ソリューションはありますか?

+0

マッチャーはそのようには動作しません。あなたが得たいものを私たちに教えてください。 – TheLostMind

+0

この形式の正規表現が欲しいです:(? X) – hanoo

+0

正規表現は設定ファイルからのものです。 – hanoo

答えて

8

アンドロイドPatternクラスの実装はICU4C、正確には、ICUによって提供されます。

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

そしてICU4Cは、現在のグループを取り込むという名前サポートしていません。番号を付けられたキャプチャグループにフォールバックする必要があります。

ICUは名前のキャプチャグループをサポートしていません。 http://bugs.icu-project.org/trac/ticket/5312

実際にこの機能が必要な場合は、名前付きキャプチャグループ機能を提供するために、ラッパーを作成し、自分で式を解析する必要があります。

2

私は私が私が見つけた解決策を共有しなければならないと思いました。名前の正規表現のグループを使用することを可能トニー・チン(tony19)によって書かれたのGithub上で利用できる素晴らしいライブラリがあります。

プロジェクトページから撮影

:。

「この軽量なライブラリはJavaの5/6の名前付きキャプチャグループのためのサポートを追加します(とAndroid上)

これは、から名前付き正規表現のプロジェクトのフォークですGoogle Code(現在は非アクティブ)。

https://github.com/tony19/named-regexp

私は上記のAndroid 4.1.1とでこれをテストしてみた、とこれまでのところ、それは魅力のように働いています。 MatcherとPatternのインポートをこのライブラリのクラスで置き換えることができ、まだ番号付きのグループを使用していた私の既存の正規表現はすべてそのまま使用できることに驚いていました。

私はこのことができますホップ。