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