我试图创建一种方法,通过IRC消息将禁用的单词添加到我的IRC主持机器人中。添加语法如下:
!addword #channel+regex+5+enabled其中'regex‘是一个正则表达式,将用于检查已发送邮件中的禁用单词。
我的问题是单词边界'\b‘不起作用。所以,如果我尝试这样做
!addword #channel+\bban\b+5+enabled只有当发送的消息内容等于' ban‘时,机器人才不会禁止'ban’这个词。例如,“请禁止我”这句话就不会被禁止。使用双反斜杠根本不起作用。
其他正则表达式(如abc、.等)可以工作,所以我必须假设这与字符'\‘有关。
处理它的代码如下:
添加禁用的单词:
word = s.substring(nthOccurrence(s, '+', 1) + 1,
                nthOccurrence(s, '+', 2));其中“%s”是添加禁用单词的消息
模式匹配:
Pattern p=Pattern.compile(word.toLowerCase());
Matcher m=p.matcher(sentMessage.toLowerCase());
if(m.matches()) sendBAN(targetChannel, sender);答案可能是显而易见的,但我就是想不出来。感谢所有能解决这个问题的人。
发布于 2015-03-02 22:31:37
我认为您必须摆脱java中的单词边界,这样它才会变成\\bban\\b,并使用find()而不是matches()。
示例:
 public static void main(String[] args) {        
    String[] test = {"ban me please","ban","This should not be banned","hello"};
    Pattern p = Pattern.compile("\\bban\\b");
    for(String  s: test) {
        Matcher m = p.matcher(s);
        if (m.find()) {
            System.out.println("Banning: " + s);
        } else {
            System.out.println("Not Banning: " + s);
        }
    }   
}提供以下功能:
Banning: ban me please
Banning: ban
Not Banning: This should not be banned
Not Banning: hellohttps://stackoverflow.com/questions/28811768
复制相似问题