Шаблон Regex PatternRepository на BlackBerry 5 - как игнорировать регистр - PullRequest
1 голос
/ 08 марта 2011

Надеюсь, этот заголовок имеет смысл - мне нужно сопоставление регулярных выражений без учета регистра в BlackBerry 5.

У меня есть регулярное выражение, определенное как:

    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 и на устройстве Curve 8900 (работает на 4.5) это работает.
  • На симуляторах os 5 и Bold 9700, которые я тестировал, приложение не может скомпилировать шаблон с IllegalArgumentException ("нераспознанный символ после (?") .

Я также пытался (наивно) установить шаблон на "/ rockstar / i", но это соответствует только точной строке -возможно, это правильное направление, но если это так, я не знаю, как реализовать его на BB.


Как бы я изменил свое регулярное выражение, чтобы подобрать шаблоны без учета регистра, используяPatternRepository, как указано выше?

PS: будет ли "правильный" способ использовать шаблон [Cc] [Oo] [Bb] [Ii] 2 ... и т.д.? Это нормально для короткой строки,но я надеюсь на более общее решение, если это возможно?

Ответы [ 3 ]

0 голосов
/ 10 июня 2011

Поскольку никто не ответил на этот вопрос, относящийся к классу PatternRepository, я отвечу самостоятельно, чтобы закрыть его.

Один из способов сделать это - использовать шаблон типа: [Cc] [Oo] [Bb] [Ii] 2 [Nn] [Tt] [Ee] [Rr] [Aa] [Cc] [Tt] [Ii] [Vv] [Ee] ... и т.д.Строка, вы ставите 2 варианта.К счастью, моя строка короткая.

Это не элегантное решение, но оно работает.К сожалению, я не знаю, как изменить строку, переданную в PatternRepository, и думаю, что сбой при использовании модификатора (?i) является ошибкой в ​​BB.

0 голосов
/ 13 мая 2013

Используйте порт библиотеки регулярных выражений jakarta: https://code.google.com/p/regexp-me/

Если вы используете поддержку Юникода, она будет съедать память, но если вы просто хотите сопоставление без учета регистра, вам просто нужно пропустить RE.Флаг MATCH_CASEINDEPENDENT при компиляции регулярного выражения.

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

0 голосов
/ 21 марта 2011

Ну, не настоящее решение для общей проблемы, но этот обходной путь прост, безопасен и эффективен:

Поскольку вы имеете дело с URL, а они не чувствительны к регистру ...(не имеет значения, пишем ли мы google.com или GooGLE.COm или что-то еще)

Самое простое решение (мы все любим KISS_principle ) - это сделать сначала строчные (или прописные)если хотите) на входе, а затем сопоставьте регулярное выражение, где не имеет значения, чувствительно ли оно к регистру или нет, потому что мы точно знаем, с чем имеем дело.

...