2011-03-08 54 views
1

我希望這個冠軍是有道理的 - 我需要不區分大小寫的正則表達式匹配的BlackBerry 5正則表達式PatternRepository模式 - 如何忽略大小寫

我有一個正則表達式定義爲:

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

它旨在匹配「cobiinteractive.com/」,後面跟着一些文字。前面的(htp:w。)就在那裏,因爲在我的設備上,我需要重寫手機適用的內部鏈接識別(無恥的黑客攻擊)。

應用程序在啓動時加載。這個想法是,我想從短信&電子郵件中獲取我的網站鏈接,並使用我的應用程序處理它們。

我把它添加到使用PatternRepository:

PatternRepository.addPattern(
     ApplicationDescriptor.currentApplicationDescriptor(), 
     GlobalConstants.SMS_REG_EXP, 
     PatternRepository.PATTERN_TYPE_REGULAR_EXPRESSION, 
     applicationMenu); 
  • 在OS 4.5/4.7的模擬器和 一個8900設備(運行4.5), 這工作。
  • 上的OS 5個模擬器和粗體 9700我測試,應用程序編譯失敗 與 拋出:IllegalArgumentException(模式 「後(無法識別 字符?」)

我還試圖(天真)設置爲「/搖滾明星/我」,但只有完全匹配的字符串相匹配的模式 - 這可能是正確的方向採取,但如果是這樣,我不知道如何實現它的BB


如何修改我的正則表達式以便使用上述的PatternRepository獲取不區分大小寫的模式?

PS:將 「正確」 的方式是使用[CC] [吳] [BB] [II] 2 ...等模式?對於一個簡短的字符串,這是可以的,但是我希望儘可能使用更一般的解決方案?

回答

0

既然誰也回答了有關的PatternRepository類的這個問題,我會自我回答,所以我可以關閉它。要做到這一點

的一種方法將是使用像圖案:[CC] [吳] [BB] [II] 2 [NN] [Tt的] [EE] [RR] [AA] [CC] [Tt的] [Ii] [Vv] [Ee] ...等字符串中的每個字母,你放2個選項。幸運的是我的字符串很短。

這不是一個完美的解決方案,但它的工作原理。不幸的是,我不知道如何修改傳遞給PatternRepository的字符串,我認爲使用(?i)修飾符時的崩潰是BB中的一個錯誤。

+0

Downvoter的興趣有什麼你想補充? –

0

那麼對於一般問題不是一個真正的解決方案,但這種解決方法非常簡單,安全,高性能:

正如你在這裏處理的URL,他們是不區分大小寫...
(它不不管我們寫google.com或gooGLE.COm或其他)

最簡單的解決方案(我們都愛KISS_principle)是第一個做一個小寫字母(或大寫,如果你喜歡)輸入和比做一個正則表達式匹配不管它是否區分大小寫都沒有關係,因爲我們知道我們正在處理的是什麼。

+0

謝謝您的建議,但是在這種情況下,這是不可能的。我指的是添加到由BlackBerry OS處理的PatternRepository的特定情況,以便識別內置消息傳遞應用程序中的字符串。因此,我不知道任何在PatternRepository識別它之前操縱字符串的方法 - 因此我的問題。理查德 –

0

使用Jakarta正則表達式庫的端口: https://code.google.com/p/regexp-me/

如果使用Unicode支持,它會吃內存, 但如果你只是想不區分大小寫的匹配, 你只需要通過RE。 MATCH_CASEINDEPENDENT標誌,當你編譯你的正則表達式。

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