gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網
最全最豐富的資訊網站

swift中的正則表達式小結

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

正則表達式的用處:

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

– 電話號碼,電子郵箱,URL…

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

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

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

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

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

語法規則

swift中的正則表達式小結

swift中的正則表達式小結

使用過程

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: Set<UITouch>, 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中的正則表達式小結,希望大家喜歡。

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
国产91色在线观看| av网址在线观看免费| 99re8这里只有精品| 不用播放器的免费av| 18禁免费观看网站| av片中文字幕| 人妻无码久久一区二区三区免费| 熟妇熟女乱妇乱女网站| 真人做人试看60分钟免费| 男人c女人视频| 日日碰狠狠躁久久躁婷婷| 男人搞女人网站| 日本美女爱爱视频| 色婷婷综合久久久久中文字幕 | 欧美日韩亚洲国产成人| 久久亚洲中文字幕无码| 国产中文字幕二区| 日本一二三区在线| xxxx在线免费观看| 成人在线观看你懂的| 精品国产鲁一鲁一区二区三区| 韩国视频一区二区三区| 国产成人免费高清视频| 国产又黄又猛又粗又爽的视频| 欧美精品一区二区性色a+v| 欧美黑人又粗又大又爽免费| 成人性做爰片免费视频| 天堂在线中文在线| 中文字幕欧美人妻精品一区| 亚洲色欲综合一区二区三区| 久久久久久久久影视| 中国一级黄色录像| 国产精品视频二| 黄色永久免费网站| 色乱码一区二区三区在线| 日本成人黄色网| 东北少妇不带套对白| 91黄色在线看| 久久手机在线视频| 中文字幕第22页| 三上悠亚免费在线观看| 日韩a级黄色片| 激情五月六月婷婷| 成人免费观看毛片| 爱情岛论坛成人| 桥本有菜av在线| 国产尤物av一区二区三区| 日韩精品在线中文字幕| 男女视频一区二区三区| www.亚洲天堂网| 国产盗摄视频在线观看| 成人亚洲免费视频| 成熟老妇女视频| 大肉大捧一进一出好爽视频| 99精品视频免费版的特色功能| 极品美女扒开粉嫩小泬| gogogo免费高清日本写真| 国产l精品国产亚洲区久久| a天堂资源在线观看| 91香蕉视频免费看| 色婷婷激情视频| 久久久久久久久久毛片| 久久精品国产99久久99久久久| www.亚洲天堂网| 91视频免费版污| 中文字幕视频在线免费观看| wwwwww.色| 国产精品自拍视频在线| 一区二区三区四区毛片| 日本在线观看视频一区| 亚洲av综合色区| 无码人妻少妇伦在线电影| av在线播放亚洲| 无码少妇一区二区三区芒果| 一起操在线视频| 久久最新免费视频| 精品国产免费av| 日本激情视频在线播放| 91福利免费观看| 日韩a级在线观看| 天堂在线资源视频| 久久艹国产精品| 一区二区在线免费看| 国产欧美自拍视频| 超碰影院在线观看| 欧美a级免费视频| 奇米视频888| 国产欧美在线一区| 国产精品igao激情视频| 丰满少妇在线观看| 精品国偷自产一区二区三区| 成人黄色一级大片| 国产第一页视频| 国产精品沙发午睡系列| 免费国产成人看片在线| 中文字幕久久av| 亚洲精品久久久中文字幕| 久久久久久久激情| 男人日女人bb视频| 欧美日韩激情视频在线观看| 日本中文字幕网址| 人妻久久久一区二区三区| 无套内谢丰满少妇中文字幕| av网站在线不卡| 韩国中文字幕av| 福利片一区二区三区| 色婷婷成人在线| 日韩视频在线观看视频| 韩国黄色一级大片| 成年人视频大全| 国产二区视频在线| 男人亚洲天堂网| 免费一区二区三区在线观看| 日韩欧美中文视频| 日本a视频在线观看| 午夜欧美福利视频| 男人天堂成人网| av网址在线观看免费| 激情五月婷婷久久| 强伦女教师2:伦理在线观看| 亚洲色婷婷久久精品av蜜桃| 青青草原av在线播放| 国产色视频在线播放| 久久国产精品网| 一个色综合久久| 国产精品久久久久久久久电影网| 99爱视频在线| 欧美视频免费看欧美视频| 最新天堂中文在线| 丁香婷婷激情网| 国产freexxxx性播放麻豆| 手机免费看av网站| 亚洲高清在线免费观看| 国产精品网站免费| 久久香蕉视频网站| 久久精品国产露脸对白| 欧美激情国产精品日韩| 波多野结衣家庭教师在线| 在线观看18视频网站| www.久久久久久久久久久| 999香蕉视频| 日韩欧美xxxx| 五月婷婷狠狠操| 超碰在线公开97| 手机免费av片| 97超碰国产精品| 成人精品视频一区二区| 狠狠热免费视频| 黄色免费高清视频| 成人av在线播放观看| 成人免费aaa| 黄色手机在线视频| 日韩 欧美 自拍| 国产女大学生av| 五月婷婷狠狠操| 欧美大片免费播放| 国产精品视频一区二区三区四区五区 | 日本中文字幕二区| 亚洲图片 自拍偷拍| 夜夜添无码一区二区三区| 我要看一级黄色大片| japanese在线播放| 国产又猛又黄的视频| 国内外成人激情免费视频| 久久久久久久久久久久久国产精品 | 免费看国产一级片| 中文av字幕在线观看| 三年中文高清在线观看第6集| 一本大道东京热无码aⅴ| 成人在线观看a| 九九爱精品视频| 国产午夜精品视频一区二区三区| 情侣黄网站免费看| 女人被男人躁得好爽免费视频| 中文字幕在线观看第三页| 男的插女的下面视频| 波多野结衣 作品| 丁香婷婷综合激情| 日本香蕉视频在线观看| 不卡中文字幕在线| 婷婷激情小说网| 黑人巨茎大战欧美白妇| 午夜精品久久久久久久99热影院| 在线免费观看av的网站| 国产男女无遮挡| 亚洲性图一区二区| 99热这里只有精品7| 中国丰满熟妇xxxx性| 俄罗斯av网站| 亚洲va在线va天堂va偷拍| 奇米777在线视频| 黄色片网址在线观看| 无人在线观看的免费高清视频| 蜜桃免费在线视频| 欧美国产在线一区| 激情综合在线观看| 午夜免费高清视频| 国产 欧美 日本| 在线免费av播放| av日韩一区二区三区|