匹配不能匹配

时间:2013-06-17 15:45:23

标签: java regex matcher

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

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);
                        }
                    }

有什么问题?此代码无法在в[ыy][шs]лит[еe]中找到regexp的正则表达式plainText = "Вышлите пожалуйста новый счет на оплату на Санг, пока согласовывали, уже прошли его сроки. Лиценз..."。我还尝试了regexp的另一种变体,但一切都没用了

3 个答案:

答案 0 :(得分: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());
    }
}

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

答案 1 :(得分:0)

使用ArrayList的内置函数indexOf(Object o)contains(Object o)来检查String中的String是否存在于何处。 e.g。

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

输出:
真正
0

答案 2 :(得分: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 ");
    }
}