首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当包含反斜杠时,从用户输入创建正则表达式模式不起作用

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

Stack Overflow用户
提问于 2015-03-02 22:05:55
回答 1查看 80关注 0票数 0

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

代码语言:javascript
运行
复制
!addword #channel+regex+5+enabled

其中'regex‘是一个正则表达式,将用于检查已发送邮件中的禁用单词。

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

代码语言:javascript
运行
复制
!addword #channel+\bban\b+5+enabled

只有当发送的消息内容等于' ban‘时,机器人才不会禁止'ban’这个词。例如,“请禁止我”这句话就不会被禁止。使用双反斜杠根本不起作用。

其他正则表达式(如abc、.等)可以工作,所以我必须假设这与字符'\‘有关。

处理它的代码如下:

添加禁用的单词:

代码语言:javascript
运行
复制
word = s.substring(nthOccurrence(s, '+', 1) + 1,
                nthOccurrence(s, '+', 2));

其中“%s”是添加禁用单词的消息

模式匹配:

代码语言:javascript
运行
复制
Pattern p=Pattern.compile(word.toLowerCase());
Matcher m=p.matcher(sentMessage.toLowerCase());
if(m.matches()) sendBAN(targetChannel, sender);

答案可能是显而易见的,但我就是想不出来。感谢所有能解决这个问题的人。

EN

回答 1

Stack Overflow用户

发布于 2015-03-02 22:31:37

我认为您必须摆脱java中的单词边界,这样它才会变成\\bban\\b,并使用find()而不是matches()

示例:

代码语言:javascript
运行
复制
 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);
        }
    }   
}

提供以下功能:

代码语言:javascript
运行
复制
Banning: ban me please
Banning: ban
Not Banning: This should not be banned
Not Banning: hello
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28811768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档