2011-03-08 4 views
1

を無視する - 私はBlackBerryの5正規表現PatternRepositoryパターン - 私はこのタイトルには理にかなって願っていますどのようにケース

の大文字と小文字を区別しない正規表現のマッチングを必要とする私のように定義された正規表現があります。

public static final String SMS_REG_EXP = "(?i)[(htp:/w\\.)]*cobiinteractive\\.com/[\\w|\\%]+"; 

"cobiinteractive.com/"の後にテキストを入力してください。前の(htp:w。)は、私のデバイス上で、電話機が適用する内部リンク認識(恥知らずのハック)を無効にする必要があったからです。

起動時にアプリが読み込まれます。アイデアは、私はsms &電子メールから私のサイトへのリンクをピックアップし、私のアプリでそれらを処理することです。 OS上

PatternRepository.addPattern(
     ApplicationDescriptor.currentApplicationDescriptor(), 
     GlobalConstants.SMS_REG_EXP, 
     PatternRepository.PATTERN_TYPE_REGULAR_EXPRESSION, 
     applicationMenu); 
  • 4.5/4.7シミュレータをして 上の曲線8900デバイスは、この作品 を(4.5を実行している):

    は、私が使用してPatternRepositoryに追加します。私がテストした5つのシミュレータや大胆 9700 OS上

  • 、アプリが はIllegalArgumentException( "(後?認識できない 文字")と パターンのコンパイルに失敗した。

私も試してみました(純粋に)パターンを "/ rockstar/i"に設定しますが、正確な文字列にのみ一致します - これはおそらく正しい方向ですが、その場合はBB上に実装する方法はわかりません。


上記のようにPatternRepositoryを使用して大文字と小文字を区別しないパターンを取得するために正規表現を変更するにはどうすればよいですか?

PS:[Cc] [Bb] [Ii] 2 ...などのパターンを使用するのは正しいですか?これは短い文字列では問題ありませんが、可能であればもっと一般的な解決策を望んでいますか?

答えて

0

PatternRepositoryクラスに関連するこの質問に他に回答したことがないので、私は自己回答して終了することができます。

これを行う1つの方法は、次のようなパターンを使用することです。[Cc] [Bb] [Ii] 2 [Nn] [Tt] [Ee] [Rc] [Tc ] [Ii] [Vv] [Ee] ... etc文字列内の各文字について、2つのオプションを指定します。幸いにも私の弦は短いです。

これは洗練された解決策ではありませんが、機能します。残念ながら、私はPatternRepositoryに渡された文字列を変更する方法を知らないし、(?i)修飾子を使用するとクラッシュがBBのバグだと思う。 、あなたはUnicodeのサポートを使用する場合は、メモリを食べるために起こっている https://code.google.com/p/regexp-me/

しかし、あなたはちょうどあなたが単にREを渡す必要が 、大文字小文字を区別しないマッチングをしたい場合:

+0

興味のある方は、あなたが追加したいことがありますか? –

0

まあ一般的な問題の真の解決策が、この問題を回避するには、簡単で安全かつパフォーマンスではありません。

あなたのURLをここに対処するよう、彼らは大文字と小文字を区別しません...
(そうでありませんgoogle.comやGooGLE.COmなどを書いても問題ありません)

最も簡単な解決法(私たちはすべてKISS_principleが大好きです)は、最初に入力時に小文字(大文字)を入力し、正規表現マッチ大文字と小文字を区別するかどうかは関係ありません。なぜなら、われわれが扱っていることが分かっているからです。

+0

この場合、アドバイスをいただきありがとうございます。私は、組み込みのメッセージングアプリケーションで文字列を識別するために、BlackBerry OSによって処理されるPatternRepositoryに追加する特定のケースを指しています。そのため、私はPatternRepositoryがそれを識別する前に文字列を操作する方法を知らないので、私の問題です。リチャード –

0

は、ジャカルタの正規表現ライブラリのポートを使用してください。あなたの正規表現をコンパイルするときにMATCH_CASEINDEPENDENTフラグ。

new RE("yourCaseInsensitivePattern", RE.MATCH_CASEINDEPENDENT | OTHER_FLAGS)

関連する問題