iOS小技能:使用正则表达式对聊天记录的关键词进行监控

语言: CN / TW / HK

“我正在参加「掘金·启航计划」”

前言

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

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

  • 需求: 如果消息命中特定的正则表达式,就执行对应的动作

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

1.1 例子:特定消息进行群内踢人

  • 目标字符串 ```objectivec \"message\":\"@姬平05290 @#公众号:iOS逆向 @https://kunnan.blog.csdn.net 飞机\"

```

  • 代码:判断消息m_nsContent 字符串中是否命中正则表达式kick_rule^(@\S+\s+)+飞机$

objectivec 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

```objectivec 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

```objectivec NSString url = @"[email protected]"; 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在正则表达式的应用: https://blog.csdn.net/z929118967/article/details/115505524