0

我有以下代码。我需要检查文本中是否存在某些禁用词列表中的任何单词。但是即使这个词存在于文本匹配器中也看不到它。这是代码:

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 + "message can't be processed because it doesn't satisfy the rule " + property;
      reason = false;
      System.out.println("reason" + mt.group() + regexp);
                        }
                    }

怎么了?此代码找不到 regexp в[ыy][шs]лит[еe],它regexp位于plainText = "Вышлите пожалуйста новый счет на оплату на Санг, пока согласовывали, уже прошли его сроки. Лиценз...". 我还尝试了另一种变体,regexp但一切都没用

4

3 回答 3

1

麻烦在别处。

import java.util.regex.*;

public class HelloWorld {

    public static void main(String []args) {
        Pattern pt = Pattern.compile("(qwer)");
        Matcher mt = pt.matcher("asdf qwer zxcv");
        System.out.println(mt.find());
    }
}

这打印出来是真的。但是,您可能希望使用单词边界作为分隔符:

import java.util.regex.*;

public class HelloWorld {

    public static void main(String []args) {
        Pattern pt = Pattern.compile("\\bqwer\\b");
        Matcher mt = pt.matcher("asdf qwer zxcv");
        System.out.println(mt.find());
        mt = pt.matcher("asdfqwer zxcv");
        System.out.println(mt.find());
    }
}

除非您需要捕获组中的关键字,否则括号是无用的。但你已经有了它的开始。

于 2013-06-17T15:56:56.627 回答
0

使用 ArrayList 的内置函数indexOf(Object o)contains(Object o)检查字符串是否存在于数组中的任何位置以及位置。例如

ArrayList<String> keywords = new ArrayList<String>();
keywords.add("hello");
System.out.println(keywords.contains("hello"));
System.out.println(keywords.indexOf("hello"));

输出:

0

于 2013-06-17T15:57:45.670 回答
0

尝试使用以下使用OR运算符的正则表达式过滤掉包含禁止词的消息。

private static void findBannedWords() {
    final ArrayList<String> keywords = new ArrayList<String>();
    keywords.add("f$%k");
    keywords.add("s!@t");
    keywords.add("a$s");

    String input = "what the f$%k";

    String bannedRegex = "";
    for (String keyword: keywords){
        bannedRegex =  bannedRegex + ".*" + keyword + ".*" + "|";
    }

    Pattern pt = Pattern.compile(bannedRegex.substring(0, bannedRegex.length()-1));
    Matcher mt = pt.matcher(input);
    if (mt.matches()) {
         System.out.println("message can't be processed because it doesn't satisfy the rule ");
    }
}
于 2013-06-17T17:24:31.557 回答