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適配)