2011-03-08 4 views
1

J'espère que ce titre est logique - je besoin insensible à la casse correspondant regex sur BlackBerry 5.modèle Regex PatternRepository sur BlackBerry 5 - comment ignorer le cas

J'ai une expression régulière définie comme:

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

Il est prévu de faire correspondre "cobiinteractive.com/" suivi d'un texte. Le précédent (htp: w.) Est juste là parce que sur mon appareil j'avais besoin de remplacer la reconnaissance de lien interne que le téléphone applique (piratage éhontée).

L'application se charge au démarrage. L'idée est que je veux ramasser des liens vers mon site à partir de sms & email, et les traiter avec mon application.

-je ajouter à l'aide de PatternRepository:

PatternRepository.addPattern(
     ApplicationDescriptor.currentApplicationDescriptor(), 
     GlobalConstants.SMS_REG_EXP, 
     PatternRepository.PATTERN_TYPE_REGULAR_EXPRESSION, 
     applicationMenu); 
  • Sur l'OS 4.5/4.7 simulateurs et un dispositif de 8900 (en cours d'exécution 4.5), cela fonctionne.
  • Sur les os 5 simulateurs et le Bold 9700 je l'ai testé, l'application ne peut pas compiler le motif avec un IllegalArgumentException ("non reconnu le caractère après (?").

J'ai aussi essayé (naïvement) pour définir le modèle sur "/ rockstar/i" mais cela ne correspond qu'à la chaîne exacte - c'est peut-être la direction correcte à prendre, mais si oui, je ne sais pas comment l'implémenter sur le BB


Comment est-ce que je modifierais mon regex afin de ramasser des modèles insensibles à la casse en utilisant le PatternRepository comme ci-dessus? PS: est-ce que le "correct" moyen serait d'utiliser le motif [Cc] [Oo] [Bb] [Ii] 2 ... etc? C'est correct pour une chaîne courte, mais j'espère une solution plus générale si possible?

Répondre

0

Puisque personne d'autre n'a répondu à cette question concernant la classe PatternRepository, je vais répondre moi-même pour que je puisse le fermer. Une façon de le faire serait d'utiliser un modèle comme: [Cc] [Oo] [Bb] [Ii] 2 [Nn] [Tt] [Ee] [Rr] [Aa] [Cc] [Tt ] [Ii] [Vv] [Ee] ... etc où pour chaque lettre de la chaîne, vous avez mis 2 options. Heureusement, ma chaîne est courte.

Ce n'est pas une solution élégante, mais cela fonctionne.Malheureusement, je ne connais pas un moyen de modifier la chaîne passée à PatternRepository et je pense que le plantage lors de l'utilisation du modificateur (?i) est un bug dans BB.

+0

Downvoter pour l'intérêt est-il quelque chose que vous aimeriez ajouter? –

0

Eh bien pas une vraie solution pour le problème général, mais cette solution est facile, sûr et performant:

Comme votre affaire ici avec des URL et ils ne sont pas sensibles à la casse ...
(il n'a pas importe si nous écrivons google.com ou GooGLE.COm ou autre)

La solution la plus simple (nous aimons tous KISS_principle) est de faire d'abord une minuscule (ou majuscule si vous voulez) sur l'entrée et de faire une correspondance regex peu importe que ce soit sensible à la casse ou non, car nous savons avec certitude à quoi nous avons affaire.

+0

Merci pour les conseils, toutefois, dans ce cas, il est impossible. Je fais référence à un cas spécifique d'ajout à PatternRepository, qui est géré par BlackBerry OS afin d'identifier les chaînes dans l'application de messagerie intégrée. En tant que tel, je ne connais aucun moyen de manipuler la chaîne avant que le PatternRepository l'identifie - d'où mon problème. Richard –

0

Utilisez le port de la bibliothèque regex jakarta: https://code.google.com/p/regexp-me/

Si vous utilisez un soutien unicode, il va manger la mémoire, mais si vous voulez juste cas correspondant insensible, vous devez simplement passer le RE. MATCH_CASEINDEPENDENT lorsque vous compilez votre regex.

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