iOS小技能:使用正则表达式对聊天记录的关键词进行监控
“我正在参加「掘金·启航计划」”
前言
正则表达式的在聊天记录中的应用
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
- iOS小技能:UITableView的适配 (iOS10/iOS14/iOS16.0)
- iOS小技能:和uni-app、unity的融合方案
- iOS小技能:iOS15崩溃排查技巧(symbolicatecrash符号化分析问题、导出和隐藏符号)
- iOS小技能:【intercept the HTTP/HTTPS requests 】利用NSURLProtocol 拦截请求
- iOS小技能: tweak 集成CocoaAsyncSocket(建连、断开、重连、心跳、通用请求)
- iOS小技能:iOS13 证件扫描 & 文字识别API
- iOS小技能:集成下拉刷新控件 & 实现无感知上拉加载更多
- iOS小技能:代码触发button的点击事件、快速找到按钮action方法
- iOS小技能:拨号、发邮件、短信、应用间跳转
- iOS小技能:链式编程在iOS开发中的应用
- iOS小技能:iOS14 读取用户剪切板数据弹出提示的兼容方案
- iOS小技能:因境外IP无法访问导致 App 被拒的解决方案
- iOS小技能:RSA签名、验签、加密、解密的原理
- iOS小技能:Xcode14新特性(适配)
- iOS小技能:Socket基础知识
- iOS小技能:SKU视图搭建
- iOS小技能: 日历的使用(案例:两个时间的比较、获取最近30天的数据)
- iOS小技能:1. iOS 实现json数据提交 2. 对同一个URL的多次请求进行数据缓存 3. 检查网络状态
- iOS小技能:使用正则表达式对聊天记录的关键词进行监控
- iOS小技能:去掉/新增导航栏黑边(iOS13适配)