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一区二区
九一国产精品视频| 亚洲综合欧美激情| 韩国黄色一级大片| 欧美wwwwwww| 天堂一区在线观看| 午夜宅男在线视频| 久国产精品视频| 国产乱女淫av麻豆国产| 手机在线免费毛片| 99精品一级欧美片免费播放| 三年中文高清在线观看第6集 | 91视频成人免费| 无码人妻aⅴ一区二区三区日本| 2025韩国大尺度电影| 在线观看污视频| 久久久久久久久久久视频| 日韩av在线第一页| 99热这里只有精品在线播放| 亚洲最大成人在线观看| 国产美女视频免费看| 日韩中文在线字幕| 激情综合在线观看| 污污网站在线观看视频| 中文字幕av导航| 男的插女的下面视频| 女性隐私黄www网站视频| 激情五月婷婷基地| 亚洲国产精品无码av| 日本中文字幕高清| 亚洲啊啊啊啊啊| 久久久噜噜噜www成人网| 欧美激情第一区| 国产 福利 在线| 亚洲AV无码成人精品一区| 欧美啪啪免费视频| 日本黄色a视频| 国产美女三级视频| 欧美 亚洲 视频| 男操女免费网站| 国产www免费| 婷婷激情5月天| www.国产区| 国产肉体ⅹxxx137大胆| 高清一区在线观看| 国产午夜伦鲁鲁| 亚洲精品偷拍视频| 91精品999| 五月婷婷深爱五月| 91九色在线观看视频| 国产日产欧美一区二区| 99视频在线视频| 国产深夜男女无套内射| 99er在线视频| www国产免费| 少妇高潮大叫好爽喷水| 欧美成人黄色网址| 日韩 欧美 高清| 久久久久久久激情| 欧美日韩一道本| 男女视频网站在线观看| 免费高清一区二区三区| 成人手机在线播放| 中国一级大黄大黄大色毛片| 亚洲精品第三页| caoporm在线视频| 国产黑丝在线视频| 国产xxxxhd| 国产欧美123| 久久福利一区二区| 九色自拍视频在线观看| 男女猛烈激情xx00免费视频| 男人添女人下部视频免费| www.亚洲成人网| 欧美日韩性生活片| 无码人妻丰满熟妇区毛片| 男人日女人下面视频| 欧美三级午夜理伦三级| 日本久久久精品视频| 日韩福利视频在线| 国产美女视频免费看| 水蜜桃在线免费观看| 韩日视频在线观看| 成人精品视频一区二区| 天天色天天综合网| 国产专区在线视频| 无码人妻h动漫| 女人高潮一级片| 欧美日韩福利在线| 日韩av资源在线| 国产精欧美一区二区三区白种人| 在线播放 亚洲| 国产美女无遮挡网站| 毛片毛片毛片毛| 日本阿v视频在线观看| www.xxx亚洲| 黄色网址在线免费看| 国产精品裸体瑜伽视频| 久久人人爽av| 青青草成人免费在线视频| 一区二区三区 欧美| 屁屁影院ccyy国产第一页| 麻豆传传媒久久久爱| 亚洲最新免费视频| 日本成人在线免费视频| 老司机午夜网站| 我看黄色一级片| 波多野结衣之无限发射| 爽爽爽在线观看| 亚洲国产精品毛片av不卡在线| 992tv成人免费观看| 国产三级日本三级在线播放| 色哟哟免费网站| 激情五月俺来也| 国模吧无码一区二区三区| 成人免费看片视频在线观看| 久久久久国产一区| 久久久久久久久久久福利| 免费看日b视频| 91性高潮久久久久久久| 亚洲一区二区蜜桃| 国产在线青青草| 老太脱裤让老头玩ⅹxxxx| 国产人妻互换一区二区| 九九热精品在线播放| 午夜免费高清视频| 欧美精品第三页| 最近免费中文字幕中文高清百度| 亚洲熟妇无码另类久久久| av无码久久久久久不卡网站| 免费在线精品视频| 国产手机视频在线观看| 视频一区二区视频| 日本美女爱爱视频| 91成人综合网| 无码粉嫩虎白一线天在线观看| 国产日产欧美一区二区| 国产成人亚洲综合无码| a级免费在线观看| 成人黄色av片| 国产成人手机视频| 最新国产黄色网址| 超碰91在线播放| 国产专区在线视频| aa视频在线播放| 国产激情在线观看视频| 国产精品自拍视频在线| 国产又爽又黄ai换脸| 996这里只有精品| 欧美在线观看成人| 69久久久久久| 日本三级福利片| 日本中文字幕网址| 一级黄色特级片| 特级西西444www| wwwwww欧美| 国产三级日本三级在线播放| 亚洲va综合va国产va中文| 欧美日韩午夜爽爽| 久久国产亚洲精品无码| 亚洲午夜激情影院| 久久久久久免费看| 另类小说第一页| 亚洲理论电影在线观看| 国产91色在线观看| 国产欧美日韩小视频| 婷婷六月天在线| 日韩精品在线视频免费观看| 亚洲黄色a v| 青青草国产免费| www.com黄色片| 国产精品沙发午睡系列| 三日本三级少妇三级99| 99精品在线免费视频| 三年中国中文在线观看免费播放| 日韩av一二三四区| 国产精品一区在线免费观看| 激情婷婷综合网| 97干在线视频| 亚洲激情免费视频| 别急慢慢来1978如如2| 97干在线视频| 日韩不卡视频一区二区| 污污的视频免费| 性生交免费视频| 69堂免费视频| 免费av手机在线观看| 蜜桃网站在线观看| 国产女同无遮挡互慰高潮91| 蜜臀视频一区二区三区| 日本国产在线播放| 老太脱裤子让老头玩xxxxx| av影院在线播放| 久久久久久久久久久综合| 日本中文字幕在线不卡| 亚洲最大综合网| www.激情小说.com| 伊人网在线综合| 在线一区二区不卡| 欧美国产日韩在线视频| 一级做a爱视频|