“我正在参加「启航方案」”

前言

正则表达式的在聊天记录中的运用

I 对聊天记录的关键词进行监控

  • 需求: 如果音讯命中特定的正则表达式,就履行对应的动作

例如内部非群管理员发现有人在群发广告,想踢人时,他只需在群中@其间某一个人+飞机关键词即可
此刻机器人群主,对聊天记录的关键词进行监控,发现符合踢人的规则就履行踢人动作

1.1 例子:特定音讯进行群内踢人

  • 方针字符串
\"message\":\"@姬平05290 @#公众号:iOS逆向 @https://kunnan.blog.csdn.net 飞机\"
  • 代码:判断音讯m_nsContent 字符串中是否命中正则表达式kick_rule^(@\S+\s+)+飞机$
        NSRange range = [m_nsContent rangeOfString:[WLSession shareSession].kick_rule options:NSRegularExpressionSearch];//^1[3]\\d{9}$
        if (range.location != NSNotFound) {
            // 找到了就进行上报
            NSLog(@" 命中了 kick_rule:%@ m_nsContent %@",[WLSession shareSession].kick_rule,[m_nsContent substringWithRange:range]);
            [self reportGroupkick_ruleAtUserListWithMsgWrap:wrap];
        }

rangeOfString:options:会回来一个NSRange,用来接收匹配的规模,当匹配不到成果时,将会回来一个NSIntegerMax最大值,也便是NSNotFound,因此咱们可以用它来判断用户输入的内容是否符合规则。

II 运用NSRegularExpression捕获用户输入的特定内容

运用NSRegularExpression捕获用户输入的特定内容

如果是可能有多个捕获成果,那么可以运用方法matchesInString:str,否则运用方法firstMatchInString:url

NSString *regex = @"\\-\\d*\\.";
NSString *str = @"-34023242.-34203020.";
NSError *error;
NSRegularExpression *regular = [NSRegularExpression regularExpressionWithPattern:regex
                                                                         options:NSRegularExpressionCaseInsensitive
                                                                           error:&error];
// 对str字符串进行匹配
NSArray *matches = [regular matchesInString:str
                                    options:0
                                      range:NSMakeRange(0, str.length)];
// 遍历匹配后的每一条记录
for (NSTextCheckingResult *match in matches) {
    NSRange range = [match range];
    NSString *mStr = [str substringWithRange:range];
    NSLog(@"%@", mStr);
}
  • 抓取单个成果:firstMatchInString:url
NSString *url = @"1229436624@qq.com";
NSError *error;
// 创建NSRegularExpression目标并指定正则表达式
NSRegularExpression *regex = [NSRegularExpression
                              regularExpressionWithPattern:@"[^@]*\\."
                              options:0
                              error:&error];
if (!error) { // 如果没有过错
    // 获取特特定字符串的规模
    NSTextCheckingResult *match = [regex firstMatchInString:url
                                                    options:0
                                                      range:NSMakeRange(0, [url length])];
    if (match) {
        // 截获特定的字符串
        NSString *result = [url substringWithRange:match.range];
        NSLog(@"%@",result);
    }
} else { // 如果有过错,则把过错打印出来
    NSLog(@"error - %@", error);
}

see also

NSPredicate在正则表达式的运用: blog.csdn.net/z929118967/…