2013-07-03 1 views
0

я должен найти слова или регулярные выражения в тексте и использовать java.util.regexp.Matcher for thisПроблемы с согласовани

метод, который должен сделать это я следующее:

final ArrayList<String> regexps = config.getProperty(property); 
for (String regexp: regexps){ 
    Pattern pt = Pattern.compile("." + regexp + ".", Pattern.CASE_INSENSITIVE); 
    Matcher mt = pt.matcher(plainText);    
     if (mt.find()){ 
      result = result + "DENIED. reason: " + property; 
      reason = false; 
      LOG.info("reason " + mt.group() + regexp); 
      } 
} 

, но этот код по какой-то причине не может найти регулярное выражение в[ыy][шs]лит[еe] в тексте

Вышлите пожалуйста новый счет на оплату на asda, пока согласовывали, уже 
прошли его сроки. Лицензионный догово 
+0

Вы не упомянули, если вы установили язык? – zEro

+0

как это сделать? это важно, вы думаете. Что касается меня, то я догадался, что сообщение может содержать английский или русский текст или и то, и другое. –

+0

Да, я был неправ. Вам не нужно беспокоиться об этом случае. – zEro

ответ

2

Есть две проблемы:

  • вы указываете точку до и после матча; как результат, для каждого слова требуется один символ; попробуйте и замените свои точки \b (или "\\b" как строка Java), которая является якорем слова;
  • вы указываете Pattern.CASE_INSENSITIVE. Но this flag only works for ASCII. Если вы хотите совместить с другими персонажами, вы ДОЛЖНЫ добавить Pattern.UNICODE_CASE к вашим фреймам компиляции шаблона.

То есть:

Pattern.compile("whatever", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE); 

В заключительной ноте, [ee] и e эквивалентны, вы, вероятно, имел в виду что-то другое здесь.

+0

+1 для обозначения '[ee]' – zEro

+0

ой, я имел в виду русский и английский e. их можно заменить, чтобы обойти безопасность. –

+0

@ НикитинМихаил безопасности? Что касается безопасности? – fge

2

Заменить:

Pattern pt = Pattern.compile("." + regexp + ".", Pattern.CASE_INSENSITIVE); 

с:

Pattern pt = Pattern.compile(".*" + regexp + ".*", Pattern.CASE_INSENSITIVE); 

 Смежные вопросы

  • Нет связанных вопросов^_^