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, пока согласовывали, уже
прошли его сроки. Лицензионный догово
4

2 回答 2

2

代替:

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

和:

Pattern pt = Pattern.compile(".*" + regexp + ".*", Pattern.CASE_INSENSITIVE);
于 2013-07-03T10:18:23.113 回答
2

有两个问题:

  • 您在比赛前后指定一个点;因此,每个单词都需要一个字符;尝试将点替换为\b(或"\\b"作为 Java 字符串),即单词锚;
  • 你指定Pattern.CASE_INSENSITIVE. 但是这个标志只适用于 ASCII。如果你想匹配其他字符,你必须添加Pattern.UNICODE_CASE到你的模式编译标志。

那是:

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

作为最后一点,[ee]并且e是等效的,您可能在这里表示其他意思。

于 2013-07-03T10:21:58.393 回答