从用户输入创建正则表达式模式在包含反斜杠时不起作用

时间:2015-03-02 14:05:55

标签: java regex irc

我试图创建一种方法,通过IRC消息将禁止的单词添加到我的IRC审核机器人。 添加语法如下:

!addword #channel+regex+5+enabled

其中'regex'是一个正则表达式,用于检查已发送消息中的禁止词。

我的问题是单词边界'\ b'不起作用。所以,如果我尝试做

!addword #channel+\bban\b+5+enabled
只有当发送的消息内容等于“禁令”时,机器人才会禁止“禁止”一词。因此,例如“禁止我请”这一行不会被禁止。使用双反斜杠根本不起作用。

其他正则表达式(如[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);

答案可能是显而易见的,但我无法理解。感谢能够解决这个问题的任何人。

1 个答案:

答案 0 :(得分:1)

我认为你必须逃避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: hello