匹配器的问题

时间:2013-07-03 10:16:53

标签: java matcher

我必须在文本中找到单词或正则表达式并使用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, пока согласовывали, уже
прошли его сроки. Лицензионный догово

2 个答案:

答案 0 :(得分:2)

替换:

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

使用:

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

答案 1 :(得分: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是等价的,你可能在这里有其他意思。