2011-03-08 38 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)