iOS小技能:使用正则表达式对聊天记录的关键词进行监控
原创
©著作权归作者所有:来自51CTO博客作者#公众号:iOS逆向的原创作品,请联系作者获取转载授权,否则将追究法律责任
前言
正则表达式的在聊天记录中的应用
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]);
[selfrangeOfString: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@";
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在正则表达式的应用