亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > swift中的正則表達式小結

swift中的正則表達式小結

熱門標簽:400免費電話去哪申請 線上教育ai外呼系統 菏澤智能ai電銷機器人銷售公司 鄂州人工智能電銷機器人軟件 實用地圖標注app 地圖標注商戶中心要收錢多少 css百度地圖標注位置顯示 宿遷智能外呼系統供應商 地圖標注字母的軟件

作為一門先進的編程語言,Swift 可以說吸收了眾多其他先進語言的優點,但是有一點卻是讓人略微失望的,就是 Swift 至今為止并沒有在語言層面上支持正則表達式。

正則表達式的用處:

判斷給定的字符串是否符合某一種規則(專門用于操作字符串)

- 電話號碼,電子郵箱,URL...

- 可以直接百度別人寫好的正則

- 別人真的寫好了,而且測試過了,我們可以直接用

- 要寫出沒有漏洞正則判斷,需要大量的測試,通常最終結果非常負責

過濾篩選字符串,網絡爬蟲

替換文字,QQ聊天,圖文混排

語法規則

使用過程

1、創建規則
2、創建正則表達式對象
3、開始匹配

代碼示例

private func check(str: String) {
 // 使用正則表達式一定要加try語句
 do {
  // - 1、創建規則
  let pattern = "[1-9][0-9]{4,14}"
  // - 2、創建正則表達式對象
  let regex = try NSRegularExpression(pattern: pattern, options: NSRegularExpressionOptions.CaseInsensitive)
  // - 3、開始匹配
  let res = regex.matchesInString(str, options: NSMatchingOptions(rawValue: 0), range: NSMakeRange(0, str.characters.count))
  // 輸出結果
  for checkingRes in res {
   print((str as NSString).substringWithRange(checkingRes.range))
  }
 }
 catch {
  print(error)
 }
}

其他幾個常用方法        

 // 匹配字符串中所有的符合規則的字符串, 返回匹配到的NSTextCheckingResult數組
      public func matchesInString(string: String, options: NSMatchingOptions, range: NSRange) -> [NSTextCheckingResult]      
      // 按照規則匹配字符串, 返回匹配到的個數
      public func numberOfMatchesInString(string: String, options: NSMatchingOptions, range: NSRange) -> Int
      
      // 按照規則匹配字符串, 返回第一個匹配到的字符串的NSTextCheckingResult
      public func firstMatchInString(string: String, options: NSMatchingOptions, range: NSRange) -> NSTextCheckingResult?
      
      // 按照規則匹配字符串, 返回第一個匹配到的字符串的范圍
      public func rangeOfFirstMatchInString(string: String, options: NSMatchingOptions, range: NSRange) -> NSRange

使用子類來匹配日期、地址、和URL

看官網文檔解釋,可以知道這個 NSDataDetector 主要用來匹配日期、地址、和URL。在使用時指定要匹配的類型

public class NSDataDetector : NSRegularExpression {
 // all instance variables are private
 /* NSDataDetector is a specialized subclass of NSRegularExpression. Instead of finding matches to regular expression patterns, it matches items identified by Data Detectors, such as dates, addresses, and URLs. The checkingTypes argument should contain one or more of the types NSTextCheckingTypeDate, NSTextCheckingTypeAddress, NSTextCheckingTypeLink, NSTextCheckingTypePhoneNumber, and NSTextCheckingTypeTransitInformation. The NSTextCheckingResult instances returned will be of the appropriate types from that list.
 */
 public init(types checkingTypes: NSTextCheckingTypes) throws
 public var checkingTypes: NSTextCheckingTypes { get }
}
// 這個是類型選擇
 public static var Date: NSTextCheckingType { get } // date/time detection
 public static var Address: NSTextCheckingType { get } // address detection
 public static var Link: NSTextCheckingType { get } // link detection

NSDataDetector 獲取URL示例

 /**
匹配字符串中的URLS

- parameter str: 要匹配的字符串
*/
private func getUrl(str:String) {
 // 創建一個正則表達式對象
 do {
  let dataDetector = try NSDataDetector(types: NSTextCheckingTypes(NSTextCheckingType.Link.rawValue))
  // 匹配字符串,返回結果集
  let res = dataDetector.matchesInString(str, options: NSMatchingOptions(rawValue: 0), range: NSMakeRange(0, str.characters.count))
  // 取出結果
  for checkingRes in res {
   print((str as NSString).substringWithRange(checkingRes.range))
  }
 }
 catch {
  print(error)
 }
}

".*?" 可以滿足一些基本的匹配要求

如果想同時匹配多個規則 ,可以通過 "|" 將多個規則連接起來

將字符串中文字替換為表情

 /**
顯示字符中的表情
- parameter str: 匹配字符串
*/
private func getEmoji(str:String) {
 let strM = NSMutableAttributedString(string: str)
 do {
  let pattern = "\\[.*?\\]"
  let regex = try NSRegularExpression(pattern: pattern, options: NSRegularExpressionOptions.CaseInsensitive)
  let res = regex.matchesInString(str, options: NSMatchingOptions(rawValue: 0), range: NSMakeRange(0, str.characters.count))
  var count = res.count
  // 反向取出文字表情
  while count > 0 {
   let checkingRes = res[--count]
   let tempStr = (str as NSString).substringWithRange(checkingRes.range)
   // 轉換字符串到表情
   if let emoticon = EmoticonPackage.emoticonWithStr(tempStr) {
    print(emoticon.chs)
    let attrStr = EmoticonTextAttachment.imageText(emoticon, font: 18)
    strM.replaceCharactersInRange(checkingRes.range, withAttributedString: attrStr)
   }
  }
  print(strM)
  // 替換字符串,顯示到label
  emoticonLabel.attributedText = strM
 }
 catch {
  print(error)
 }
}

TextKit 給URL高亮顯示

主要用到三個類

NSTextStorage
NSLayoutManager
NSTextContainer

自定義UILabel來實現url高亮

1、定義要用到的屬性

 /*
 只要textStorage中的內容發生變化, 就可以通知layoutManager重新布局
 layoutManager重新布局需要知道繪制到什么地方, 所以layoutManager就會文textContainer繪制的區域
 */
 // 準們用于存儲內容的
 // textStorage 中有 layoutManager
 private lazy var textStorage = NSTextStorage()
 // 專門用于管理布局
 // layoutManager 中有 textContainer
 private lazy var layoutManager = NSLayoutManager()
 // 專門用于指定繪制的區域
 private lazy var textContainer = NSTextContainer()
 override init(frame: CGRect) {
   super.init(frame: frame)
   setupSystem()
 }
 required init?(coder aDecoder: NSCoder) {
   super.init(coder: aDecoder)
   setupSystem()
 }
 private func setupSystem()
 {
   // 1.將layoutManager添加到textStorage
   textStorage.addLayoutManager(layoutManager)
   // 2.將textContainer添加到layoutManager
   layoutManager.addTextContainer(textContainer)
 }
 override func layoutSubviews() {
   super.layoutSubviews()
  // 3.指定區域
   textContainer.size = bounds.size
 }

2、重寫label的text屬性

override var text: String?
  {
  didSet{
 // 1.修改textStorage存儲的內容
 textStorage.setAttributedString(NSAttributedString(string: text!))
 // 2.設置textStorage的屬性
 textStorage.addAttribute(NSFontAttributeName, value: UIFont.systemFontOfSize(20), range: NSMakeRange(0, text!.characters.count))
 // 3.處理URL
 self.URLRegex()
 // 2.通知layoutManager重新布局
 setNeedsDisplay()
  }
}

3、匹配字符串

 func URLRegex()
 {
  // 1.創建一個正則表達式對象
  do{
   let dataDetector = try NSDataDetector(types: NSTextCheckingTypes(NSTextCheckingType.Link.rawValue))
   let res = dataDetector.matchesInString(textStorage.string, options: NSMatchingOptions(rawValue: 0), range: NSMakeRange(0, textStorage.string.characters.count))
   // 4取出結果
   for checkingRes in res
   {
    let str = (textStorage.string as NSString).substringWithRange(checkingRes.range)
    let tempStr = NSMutableAttributedString(string: str)
//  tempStr.addAttribute(NSForegroundColorAttributeName, value: UIColor.redColor(), range: NSMakeRange(0, str.characters.count))
    tempStr.addAttributes([NSFontAttributeName: UIFont.systemFontOfSize(20), NSForegroundColorAttributeName: UIColor.redColor()], range: NSMakeRange(0, str.characters.count))
    textStorage.replaceCharactersInRange(checkingRes.range, withAttributedString: tempStr)
   }
  }catch
  {
   print(error)
  }
 }

4、重繪文字

 // 如果是UILabel調用setNeedsDisplay方法, 系統會促發drawTextInRect
override func drawTextInRect(rect: CGRect) {
 // 重繪
 // 字形 : 理解為一個小的UIView
 /*
 第一個參數: 指定繪制的范圍
 第二個參數: 指定從什么位置開始繪制
 */
 layoutManager.drawGlyphsForGlyphRange(NSMakeRange(0, text!.characters.count), atPoint: CGPointZero)
}

獲取label中URL的點擊

如果要獲取URL的點擊,那么必須獲取點擊的范圍

 override func touchesBegan(touches: SetUITouch>, withEvent event: UIEvent?) {
 // 1、獲取手指點擊的位置
 let touch = (touches as NSSet).anyObject()!
 let point = touch.locationInView(touch.view)
 print(point)
 // 2、獲取URL區域
 // 注意: 沒有辦法直接設置UITextRange的范圍
 let range = NSMakeRange(10, 20)
 // 只要設置selectedRange, 那么就相當于設置了selectedTextRange
 selectedRange = range
 // 給定指定的range, 返回range對應的字符串的rect
 // 返回數組的原因是因為文字可能換行
 let array = selectionRectsForRange(selectedTextRange!)
 for selectionRect in array {
   if CGRectContainsPoint(selectionRect.rect, point) {
    print("點擊了URL")
   }
 }
}

以上內容就是小編跟大家介紹的swift中的正則表達式小結,希望大家喜歡。

您可能感興趣的文章:
  • Swift的74個常用內置函數介紹
  • Swift教程之字符串和字符詳解
  • 升級到Swift 4.0可能遇到的坑總結
  • Swift中的指針操作和使用詳細介紹
  • Swift中的命名空間詳解

標簽:梅州 恩施 六安 鞍山 池州 三亞 綿陽 咸陽

巨人網絡通訊聲明:本文標題《swift中的正則表達式小結》,本文關鍵詞  swift,中的,正則,表達式,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《swift中的正則表達式小結》相關的同類信息!
  • 本頁收集關于swift中的正則表達式小結的相關信息資訊供網民參考!
  • 推薦文章
    亚洲天堂一区二区三区四区| 国产精品1024永久免费视频 | 欧美一区二区三区性| 日韩在线观看视频免费| 国产国产人免费视频成69堂| 国产一区二区福利久久| 久久久成人网| 色综合久久手机在线| 国产综合91天堂亚洲国产| 一级毛片视频免费| 日本免费看视频| 精品国产一区二区三区久| 青青青草影院 | 亚洲精品久久久中文字| 欧美国产日韩在线| 成人免费观看男女羞羞视频| 日韩中文字幕在线观看视频| 美女免费精品高清毛片在线视| 欧美另类videosbestsex视频| 麻豆网站在线看| 日本在线www| 久久国产精品只做精品| 韩国三级视频在线观看| 黄视频网站在线观看| 久久精品免视看国产明星| 国产成人精品影视| 青青青草影院 | 日本免费区| 精品国产香蕉在线播出| 国产视频一区二区在线观看| 台湾毛片| 日本特黄特色aa大片免费| 91麻豆精品国产综合久久久| 在线观看成人网 | 亚洲精品中文字幕久久久久久| 欧美a级v片不卡在线观看| 午夜在线观看视频免费 成人| 天天做日日爱| 久久99这里只有精品国产| 91麻豆爱豆果冻天美星空| 天天做人人爱夜夜爽2020毛片| 日本在线www| 精品视频在线看 | 国产视频一区二区在线观看| 日韩中文字幕在线播放| 午夜在线亚洲| 成人影院久久久久久影院| 免费毛片播放| 午夜在线观看视频免费 成人| 免费国产在线观看| 国产视频一区二区三区四区| 日日夜人人澡人人澡人人看免| 日韩avdvd| 亚洲天堂免费观看| 午夜在线影院| 中文字幕一区二区三区精彩视频 | 国产不卡精品一区二区三区| 欧美a级片视频| 九九久久国产精品| a级毛片免费观看网站| 尤物视频网站在线| 国产91精品一区| 日韩在线观看视频免费| 亚洲wwwwww| 午夜家庭影院| 国产网站免费视频| 91麻豆精品国产自产在线观看一区| 午夜久久网| 国产视频久久久| 亚洲女人国产香蕉久久精品 | 日本伦理黄色大片在线观看网站| 国产成人精品一区二区视频| 黄视频网站在线免费观看| 四虎影视库| 九九九在线视频| 成人影院久久久久久影院| 国产91素人搭讪系列天堂| 日日夜人人澡人人澡人人看免| 精品视频在线观看免费| 国产极品白嫩美女在线观看看| 日本免费乱理伦片在线观看2018| 高清一级片| 人人干人人草| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 午夜家庭影院| 亚洲第一色在线| 欧美1区| 天天做人人爱夜夜爽2020| 成人免费一级毛片在线播放视频| 欧美日本韩国| 欧美18性精品| 四虎影视久久| 精品视频在线看| 精品视频免费在线| 国产精品1024永久免费视频| 国产国语在线播放视频| 日本伦理黄色大片在线观看网站| 日韩在线观看视频免费| 高清一级片| 久久精品欧美一区二区| 毛片高清| 日韩中文字幕在线观看视频| 精品在线观看一区| 天天色色网| 国产视频一区二区在线观看| 黄色短视屏| 毛片高清| 久草免费在线色站| 国产麻豆精品| 欧美激情中文字幕一区二区| 精品视频在线观看免费| 国产福利免费视频| 午夜激情视频在线播放| 999久久66久6只有精品| 精品在线免费播放| 青草国产在线观看| 国产高清在线精品一区二区| 黄视频网站在线观看| 台湾毛片| 精品在线视频播放| 天天做日日爱| 一级女性全黄久久生活片| 亚洲 欧美 成人日韩| 日韩在线观看视频黄| 九九精品在线播放| 免费国产在线观看| 国产精品123| 成人免费观看网欧美片| 日韩avdvd| 久久99中文字幕| 久久国产精品自由自在| 国产欧美精品| 日日夜夜婷婷| 亚久久伊人精品青青草原2020| 97视频免费在线| 香蕉视频久久| 999久久66久6只有精品| 一级女性全黄久久生活片| 午夜在线影院| 日本伦理黄色大片在线观看网站| 日韩专区第一页| 国产91视频网| a级精品九九九大片免费看| 韩国三级视频网站| 国产伦精品一区二区三区在线观看| 天天色成人| 欧美爱色| 国产伦久视频免费观看视频| 九九九在线视频| 亚洲爆爽| 久久久久久久免费视频| 欧美激情影院| 亚洲 欧美 成人日韩| 成人影院一区二区三区| 日韩中文字幕在线观看视频| 久久久久久久男人的天堂| 九九九国产| 中文字幕一区二区三区 精品| 四虎影视精品永久免费网站| 97视频免费在线| 日本在线不卡视频| 国产国语对白一级毛片| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 韩国三级视频在线观看| 日本免费看视频| 九九精品久久| 国产91精品系列在线观看| 国产成人女人在线视频观看| 欧美激情一区二区三区在线| 国产成人啪精品视频免费软件| 欧美爱爱动态| 日本乱中文字幕系列| 日韩一级黄色片| 国产麻豆精品高清在线播放| 久久久久久久网| 99久久精品费精品国产一区二区| 日本在线不卡视频| 四虎影视精品永久免费网站| 91麻豆国产级在线| 精品国产一区二区三区国产馆| 国产一区二区精品| 国产高清在线精品一区a| 久久久成人网| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 可以在线看黄的网站| 国产激情视频在线观看| 欧美a免费| 天天色成人| 国产一区二区精品久久91| 四虎久久精品国产| 人人干人人插| 麻豆系列国产剧在线观看| 国产视频久久久久| 国产成人精品一区二区视频| 成人在激情在线视频| 国产精品1024永久免费视频| 国产国产人免费视频成69堂| 成人高清视频免费观看| 国产成人精品在线| 亚洲精品中文字幕久久久久久|