婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > swift中的正則表達(dá)式小結(jié)

swift中的正則表達(dá)式小結(jié)

熱門標(biāo)簽:400免費(fèi)電話去哪申請(qǐng) 線上教育ai外呼系統(tǒng) 菏澤智能ai電銷機(jī)器人銷售公司 鄂州人工智能電銷機(jī)器人軟件 實(shí)用地圖標(biāo)注app 地圖標(biāo)注商戶中心要收錢多少 css百度地圖標(biāo)注位置顯示 宿遷智能外呼系統(tǒng)供應(yīng)商 地圖標(biāo)注字母的軟件

作為一門先進(jìn)的編程語(yǔ)言,Swift 可以說(shuō)吸收了眾多其他先進(jìn)語(yǔ)言的優(yōu)點(diǎn),但是有一點(diǎn)卻是讓人略微失望的,就是 Swift 至今為止并沒(méi)有在語(yǔ)言層面上支持正則表達(dá)式。

正則表達(dá)式的用處:

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

- 電話號(hào)碼,電子郵箱,URL...

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

- 別人真的寫好了,而且測(cè)試過(guò)了,我們可以直接用

- 要寫出沒(méi)有漏洞正則判斷,需要大量的測(cè)試,通常最終結(jié)果非常負(fù)責(zé)

過(guò)濾篩選字符串,網(wǎng)絡(luò)爬蟲

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

語(yǔ)法規(guī)則

使用過(guò)程

1、創(chuàng)建規(guī)則
2、創(chuàng)建正則表達(dá)式對(duì)象
3、開始匹配

代碼示例

private func check(str: String) {
 // 使用正則表達(dá)式一定要加try語(yǔ)句
 do {
  // - 1、創(chuàng)建規(guī)則
  let pattern = "[1-9][0-9]{4,14}"
  // - 2、創(chuàng)建正則表達(dá)式對(duì)象
  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))
  // 輸出結(jié)果
  for checkingRes in res {
   print((str as NSString).substringWithRange(checkingRes.range))
  }
 }
 catch {
  print(error)
 }
}

其他幾個(gè)常用方法        

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

使用子類來(lái)匹配日期、地址、和URL

看官網(wǎng)文檔解釋,可以知道這個(gè) NSDataDetector 主要用來(lái)匹配日期、地址、和URL。在使用時(shí)指定要匹配的類型

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 }
}
// 這個(gè)是類型選擇
 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) {
 // 創(chuàng)建一個(gè)正則表達(dá)式對(duì)象
 do {
  let dataDetector = try NSDataDetector(types: NSTextCheckingTypes(NSTextCheckingType.Link.rawValue))
  // 匹配字符串,返回結(jié)果集
  let res = dataDetector.matchesInString(str, options: NSMatchingOptions(rawValue: 0), range: NSMakeRange(0, str.characters.count))
  // 取出結(jié)果
  for checkingRes in res {
   print((str as NSString).substringWithRange(checkingRes.range))
  }
 }
 catch {
  print(error)
 }
}

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

如果想同時(shí)匹配多個(gè)規(guī)則 ,可以通過(guò) "|" 將多個(gè)規(guī)則連接起來(lái)

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

 /**
顯示字符中的表情
- 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)
   // 轉(zhuǎn)換字符串到表情
   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高亮顯示

主要用到三個(gè)類

NSTextStorage
NSLayoutManager
NSTextContainer

自定義UILabel來(lái)實(shí)現(xiàn)url高亮

1、定義要用到的屬性

 /*
 只要textStorage中的內(nèi)容發(fā)生變化, 就可以通知layoutManager重新布局
 layoutManager重新布局需要知道繪制到什么地方, 所以layoutManager就會(huì)文textContainer繪制的區(qū)域
 */
 // 準(zhǔn)們用于存儲(chǔ)內(nèi)容的
 // textStorage 中有 layoutManager
 private lazy var textStorage = NSTextStorage()
 // 專門用于管理布局
 // layoutManager 中有 textContainer
 private lazy var layoutManager = NSLayoutManager()
 // 專門用于指定繪制的區(qū)域
 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.指定區(qū)域
   textContainer.size = bounds.size
 }

2、重寫label的text屬性

override var text: String?
  {
  didSet{
 // 1.修改textStorage存儲(chǔ)的內(nèi)容
 textStorage.setAttributedString(NSAttributedString(string: text!))
 // 2.設(shè)置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.創(chuàng)建一個(gè)正則表達(dá)式對(duì)象
  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取出結(jié)果
   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調(diào)用setNeedsDisplay方法, 系統(tǒng)會(huì)促發(fā)drawTextInRect
override func drawTextInRect(rect: CGRect) {
 // 重繪
 // 字形 : 理解為一個(gè)小的UIView
 /*
 第一個(gè)參數(shù): 指定繪制的范圍
 第二個(gè)參數(shù): 指定從什么位置開始繪制
 */
 layoutManager.drawGlyphsForGlyphRange(NSMakeRange(0, text!.characters.count), atPoint: CGPointZero)
}

獲取label中URL的點(diǎn)擊

如果要獲取URL的點(diǎn)擊,那么必須獲取點(diǎn)擊的范圍

 override func touchesBegan(touches: SetUITouch>, withEvent event: UIEvent?) {
 // 1、獲取手指點(diǎn)擊的位置
 let touch = (touches as NSSet).anyObject()!
 let point = touch.locationInView(touch.view)
 print(point)
 // 2、獲取URL區(qū)域
 // 注意: 沒(méi)有辦法直接設(shè)置UITextRange的范圍
 let range = NSMakeRange(10, 20)
 // 只要設(shè)置selectedRange, 那么就相當(dāng)于設(shè)置了selectedTextRange
 selectedRange = range
 // 給定指定的range, 返回range對(duì)應(yīng)的字符串的rect
 // 返回?cái)?shù)組的原因是因?yàn)槲淖挚赡軗Q行
 let array = selectionRectsForRange(selectedTextRange!)
 for selectionRect in array {
   if CGRectContainsPoint(selectionRect.rect, point) {
    print("點(diǎn)擊了URL")
   }
 }
}

以上內(nèi)容就是小編跟大家介紹的swift中的正則表達(dá)式小結(jié),希望大家喜歡。

您可能感興趣的文章:
  • Swift的74個(gè)常用內(nèi)置函數(shù)介紹
  • Swift教程之字符串和字符詳解
  • 升級(jí)到Swift 4.0可能遇到的坑總結(jié)
  • Swift中的指針操作和使用詳細(xì)介紹
  • Swift中的命名空間詳解

標(biāo)簽:梅州 恩施 六安 鞍山 池州 三亞 綿陽(yáng) 咸陽(yáng)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《swift中的正則表達(dá)式小結(jié)》,本文關(guān)鍵詞  swift,中的,正則,表達(dá)式,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《swift中的正則表達(dá)式小結(jié)》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于swift中的正則表達(dá)式小結(jié)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    久久精品国产一区二区三区免费看| 欧美三级电影一区| 日韩精品欧美精品| 亚洲国产欧美在线人成| 亚洲欧美国产三级| 亚洲精品你懂的| 亚洲精品成人精品456| 亚洲欧美激情一区二区| 中文字幕制服丝袜成人av| 久久女同精品一区二区| 久久久久久久久99精品| 日本一区二区不卡视频| 国产精品久久久久久久久晋中 | 91偷拍与自偷拍精品| 成人福利在线看| 91亚洲精品乱码久久久久久蜜桃| 色综合中文字幕国产 | 欧美色图一区二区三区| 在线免费av一区| 制服丝袜一区二区三区| 久久综合色8888| 日韩伦理av电影| 日韩精品午夜视频| 东方欧美亚洲色图在线| 欧美在线观看视频一区二区| 欧美高清你懂得| 国产三级一区二区三区| 亚洲黄色在线视频| 久久精品久久99精品久久| 成人黄色小视频| 欧美日韩dvd在线观看| 欧美成人性战久久| 亚洲人成网站色在线观看| 婷婷国产v国产偷v亚洲高清| 国产黄色精品视频| 欧美日韩国产免费一区二区| 久久久精品黄色| 亚洲地区一二三色| 国产成人精品aa毛片| 在线欧美一区二区| 中文在线一区二区| 日本美女一区二区| 色婷婷亚洲精品| 26uuu成人网一区二区三区| 尤物在线观看一区| 国产高清一区日本| 91精品啪在线观看国产60岁| 国产精品久久久久天堂| 韩国女主播一区二区三区| 色呦呦国产精品| 国产免费成人在线视频| 蜜臀国产一区二区三区在线播放| 色综合久久天天| 国产视频不卡一区| 日韩黄色片在线观看| 在线免费av一区| 亚洲视频你懂的| 福利视频网站一区二区三区| 日韩精品中文字幕一区二区三区 | 91麻豆6部合集magnet| 精品人在线二区三区| 午夜欧美电影在线观看| 一本色道久久综合狠狠躁的推荐| 久久久久久久久99精品| 精品一区二区三区在线播放 | 国产欧美一区二区三区网站| 日本欧美肥老太交大片| 欧美日韩精品一区视频| 一区二区三区在线观看欧美| 大白屁股一区二区视频| 亚洲国产电影在线观看| 国产真实乱偷精品视频免| 日韩三级视频中文字幕| 美女网站一区二区| 欧美一级视频精品观看| 午夜精品影院在线观看| 欧美精品久久天天躁| 天堂av在线一区| 欧美老女人在线| 美女爽到高潮91| 精品国产乱码久久久久久久| 玖玖九九国产精品| 日韩女优电影在线观看| 国产乱码一区二区三区| 最新国产精品久久精品| 色爱区综合激月婷婷| 亚洲高清免费观看 | 欧美顶级少妇做爰| 奇米影视一区二区三区小说| 欧美草草影院在线视频| 国产91综合网| 亚洲一卡二卡三卡四卡| 欧美不卡一区二区三区四区| 国产v综合v亚洲欧| 尤物视频一区二区| 日韩欧美在线不卡| 国产成人综合在线观看| 亚洲精品国产视频| 欧美一区二区三区在线观看视频| 精品一区二区三区免费播放| 国产精品女同互慰在线看| 欧美日韩在线免费视频| 国产在线精品视频| 一区二区三区高清不卡| 日韩一区二区三区在线| a美女胸又www黄视频久久| 亚洲成在人线免费| 国产日产欧美一区二区三区 | 久久免费视频一区| 99久久精品免费看国产| 麻豆精品一区二区三区| 国产精品久久二区二区| 91.成人天堂一区| 不卡在线视频中文字幕| 日韩vs国产vs欧美| 一色屋精品亚洲香蕉网站| 欧美va日韩va| 欧美亚洲图片小说| 成人av电影在线播放| 蜜臀久久99精品久久久画质超高清 | 亚洲国产精品人人做人人爽| 久久久精品日韩欧美| 欧美日韩久久久| 99精品一区二区| 国产精品自产自拍| 日韩成人午夜精品| 亚洲一区二区三区四区在线 | 欧美精品自拍偷拍| 成人晚上爱看视频| 国产一区美女在线| 裸体一区二区三区| 亚洲成a人片在线观看中文| 成人欧美一区二区三区视频网页| 日韩视频不卡中文| 日韩一区二区三免费高清| 欧美视频一区二| 欧美三级电影网站| 欧洲亚洲国产日韩| 91亚洲精品久久久蜜桃网站| 成人h版在线观看| 国产成人小视频| 国产成a人亚洲| 国产精品一区二区黑丝| 韩日欧美一区二区三区| 蜜臀精品一区二区三区在线观看| 日本午夜精品一区二区三区电影| 性久久久久久久久久久久| 亚洲一区在线电影| 亚洲一区二区三区在线看| 亚洲黄色小说网站| 亚洲一区二区在线观看视频| 亚洲在线观看免费| 亚洲成精国产精品女| 午夜私人影院久久久久| 日韩有码一区二区三区| 日韩不卡在线观看日韩不卡视频| 日本午夜精品一区二区三区电影| 麻豆免费精品视频| 国产成人午夜电影网| aaa国产一区| 欧美日韩激情一区二区| 日韩免费观看高清完整版 | 麻豆成人综合网| 国产制服丝袜一区| 成人av一区二区三区| 欧美亚洲动漫制服丝袜| 在线成人免费观看| 精品国产欧美一区二区| 国产精品乱人伦| 亚洲一区在线观看视频| 久久精品999| 处破女av一区二区| 欧美性猛交xxxxxx富婆| 精品奇米国产一区二区三区| 日韩不卡一区二区三区 | 91色.com| 日韩精品最新网址| 国产精品五月天| 首页亚洲欧美制服丝腿| 国产精品一区二区果冻传媒| 在线精品视频一区二区| 精品免费国产一区二区三区四区| 久久精品视频在线免费观看| 亚洲综合自拍偷拍| 国产一区二区电影| 欧美日韩一区不卡| 久久精品无码一区二区三区| 亚洲一区二区在线观看视频| 国产精品一品二品| 欧美亚洲图片小说| 欧美极品另类videosde| 日韩精品欧美精品| 色又黄又爽网站www久久| 久久伊99综合婷婷久久伊| 丝袜美腿亚洲综合| 一本久道中文字幕精品亚洲嫩| 欧美v日韩v国产v| 亚洲不卡在线观看| 99视频精品在线| 久久久综合激的五月天|