成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

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

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

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

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

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

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

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

- 可以直接百度別人寫(xiě)好的正則

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

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

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

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

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

使用過(guò)程

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

代碼示例

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、開(kāi)始匹配
  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)來(lái)匹配日期、地址、和URL

看官網(wǎng)文檔解釋?zhuān)梢灾肋@個(gè) NSDataDetector 主要用來(lái)匹配日期、地址、和URL。在使用時(shí)指定要匹配的類(lèi)型

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è)是類(lèi)型選擇
 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)
 }
}

".*?" 可以滿(mǎn)足一些基本的匹配要求

如果想同時(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è)類(lèi)

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()
 // 專(zhuān)門(mén)用于管理布局
 // layoutManager 中有 textContainer
 private lazy var layoutManager = NSLayoutManager()
 // 專(zhuān)門(mén)用于指定繪制的區(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、重寫(xiě)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ù): 指定從什么位置開(kāi)始繪制
 */
 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)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于swift中的正則表達(dá)式小結(jié)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    一区二区三区黄| 神马影院午夜我不卡影院| 91丨九色丨尤物| 乱妇乱女熟妇熟女网站| 国产精品一区视频网站| 98视频在线噜噜噜国产| 欧美影视一区二区| 久久久久无码精品| 国产探花精品一区二区| 日本黄色免费在线| 日韩中文字幕av| 麻豆av在线免费看| 蜜桃传媒在线| 国产亚洲精品久久飘花| 国产在线精品免费av| 国产精品亚洲激情| 亚洲精品进入| 手机看片国产精品| 亚洲aa在线| 啪啪小视频网站| 国产精选在线观看| 日韩成人av一区| 亚洲kkk444kkk在线观看| 久久香蕉精品| 亚洲美女偷拍久久| 日韩在线观看你懂的| 精品久久免费| www.亚洲高清| 亚洲超碰97人人做人人爱| 欧美日韩精选| 91成人在线视频观看| 国产精品夜夜夜一区二区三区尤| 国产区高清在线| 国产精品sm| 免费在线欧美黄色| 被男人吃奶添下面好舒服动态图| 亚洲精品中文字幕在线播放| 激情欧美丁香| 欧美精品在线观看一区二区| 99爱视频在线| 日批免费观看视频| 亚洲成人精品久久| 91网在线播放| 国产传媒欧美日韩成人| 天天综合网在线| 国产三级精品三级在线观看国产| 久久久99精品免费观看不卡| 7777久久香蕉成人影院| 专区另类欧美日韩| av一区在线| 国产欧美日韩影院| 日韩精品中午字幕| 欧美日韩一区二区电影| 欧美日韩精品免费观看视一区二区| 欧美三级 欧美一级| 国产精品资源在线观看| 日韩成人伦理| 日本高清成人vr专区| 精品成人无码久久久久久| 国产情人节一区| 国产综合一区二区| 精品三级久久久久久久电影聊斋| 欧美日韩激情一区二区三区| 国产精品高清一区二区三区| 少妇淫片在线影院| 三妻四妾完整版在线观看电视剧| 欧美精品一区二区三区四区五区| 成人福利在线观看| 国产福利精品一区| 国产精品视频yy9099| 成人动漫精品一区二区| 亚洲人被黑人高潮完整版| 全亚洲第一av番号网站| 91亚洲一线产区二线产区| 亚洲综合欧美| 99久久久精品| 欧美国产日产图区| 波多野结衣一区二区三区在线观看| 久久亚洲影院| 亚洲精品一区视频| 国产精品视频在线播放| 国产精品777777| 日韩精品一区二区亚洲av| 日本亚洲欧美成人| 国产精品旅馆在线| 日韩在线视频不卡| 草草在线视频| 精品人妻一区二区三区日产乱码| 一区二区三区四区视频在线| 国产一区二区在线观看免费| 国产精品久久久久一区二区三区| 国产乱码精品一区二区三区av| 网站在线你懂的| 亚洲一区二区福利视频| 北岛玲一区二区三区| 日韩中文字幕免费在线| 日韩欧美视频| 亚洲一级影院| 91香蕉一区二区三区在线观看| 久久精品—区二区三区舞蹈| 在线观看国产一级片| 久久精品天堂| 午夜国产福利在线| 成人欧美视频在线| 精品成人国产在线观看男人呻吟| 韩国女主播一区二区| 一本久道久久综合无码中文| 国产乱码精品一区二区三区不卡| 亚洲自拍小视频免费观看| 五月激情综合网| 欧美性xxxx极品hd欧美| 亚洲 国产 日韩 综合一区| 精品免费在线视频| 欧美黄色免费网站| 成人免费图片免费观看| 日本久久伊人| 欧美另类一区二区| 久草综合在线| 久久网站免费视频| 亚洲成在人线免费| 欧美一三区三区四区免费在线看| 日韩经典中文字幕在线观看| 91网站观看| 久久国产精品久久精品| 九九精品视频在线看| 中文字幕免费在线观看视频一区| 日韩69视频在线观看| 特黄毛片在线观看| 欧美第一页草草影院浮力| 青青草观看免费视频在线| 国产精品欧美一级免费| 青青草原国产免费| 久久久久久久久久久妇女| 免费aⅴ网站| 成品人视频ww入口| 日本xxx在线播放| 91精品国产91久久久久福利| 国产一区二区三区视频免费观看| 欧美色综合网站| 亚洲国产欧美国产综合一区| 97视频热人人精品| 日韩视频免费直播| 久久久99免费| 午夜精品久久久久99热蜜桃导演| 国产a级黄色大片| 欧美mv日韩mv| 欧美亚洲一区在线| 国产精品.xx视频.xxtv| 911福利视频| www.一区二区| 东京热av一区| 偷拍盗摄高潮叫床对白清晰| 久草视频国产| 91精品国自产在线| 在线看片国产福利你懂的| 久久久91麻豆精品国产一区| 亚洲熟女乱综合一区二区三区| 精品一区国产| 欧美另类极品videosbestfree| 日韩在线视频导航| 日本一区二区三区精品| 日韩av地址| 国产精品欧美精品| 伊人久久免费视频| 免费网站永久免费观看| 粉嫩久久99精品久久久久久夜| 精品国产美女在线| 久久精品欧美一区二区三区麻豆| 狠狠干夜夜爽| 日韩在线综合| 成人国产在线| 久久久久久久久久一区| 欧美xxxxx18| www.av88| 国产精品区一区二区三含羞草| 久久一本综合频道| 欧美三区在线观看| 98精品久久久久久久| 亚洲va欧美va人人爽午夜| 国产亚洲精品久久久久久打不开| 午夜日韩激情| 久草视频免费在线播放| 国产九九九视频| 日韩成年人视频| 波多野结衣电影免费观看| 欧美××××黑人××性爽| 成人黄色免费看| 免费国产自久久久久三四区久久| 38少妇精品导航| 国产免费黄色av| 午夜伦理在线视频| 日本成人在线免费观看| www.中文字幕在线观看| 999久久久精品一区二区| 久久精品国产69国产精品亚洲| 亚洲欧美另类图片| 久久五月精品中文字幕| 先锋资源在线视频| 国产亚洲依依| 欧美成人一区在线观看| 国产91在线视频| 国产精品99一区二区三| www.五月天色| 一区二区三区国| 日本性爱视频在线观看| 欧美图片第一页| 日韩欧美视频免费在线观看| 午夜精品久久久久99蜜桃最新版| 一个人看的www久久| 日韩人妻精品一区二区三区| 欧美美女在线| 麻豆免费在线视频| 亚洲国产精品yw在线观看| 91亚洲国产精品| 欧美肥臀大乳一区二区免费视频| 国产在线视频一区二区| 成人免费看aa片| 国内精品久久久久久久久蜜桃| 国产精品入口免费软件| 欧美不卡激情三级在线观看| 欧美wwwwwww| 久久久亚洲精品一区二区三区| 国产麻豆剧果冻传媒观看hd高清| 一区二区网站| 免费在线视频观看| 亚洲成人a**址| caoporm超碰国产精品| 国产精品久久一级| 国产精品jvid在线观看| 国产目拍亚洲精品99久久精品| 性猛交富婆╳xxx乱大交一| 亚洲人成伊人成综合网小说| 国产精品99久久久久久大便| 欧美一区二区三区免费在线看| 九九热精品在线观看| 国产一区二区在线视频观看| 欧美成人一区二区在线观看| 男女黄床上色视频| 国产美女主播一区| 秋霞欧美在线观看| 久操成人av| yes4444视频在线观看| 免费电影网站在线观看| 免费国产a级片| 亚洲自拍偷拍视频| 欧美猛交ⅹxxx乱大交视频| 日本dhxxxxxdh14日本| 欧美视频免费看| 高清不卡一二三区| 亚洲最新在线视频| 性欧美69xoxoxoxo| 亚洲成人手机在线观看| 亚洲综合网在线| 国产精品免费免费| 久久久久久久久久久网站| 久久综合入口| 久久午夜老司机| 亚洲最大成人在线视频| 亚洲精品手机在线| 亚洲欧洲综合| 99九九热只有国产精品| 日韩视频一区二区三区在线播放免费观看| 亚洲午夜精品久久久久久久久| a级在线免费观看| 91免费看片网站| 在线观看91久久久久久| 国产av不卡一区二区| 国产在线精品免费| 黄色av网址在线免费观看| 亚洲免费成人在线| 伊人久久综合网另类网站| 搡的我好爽在线观看免费视频| 精品一区二区三区免费爱| 欧美精品v日韩精品v国产精品| 永久免费毛片在线观看| 手机在线免费观看毛片| 96亚洲精品久久久蜜桃| 欧美色窝79yyyycom| 国产精品毛片大码女人| 青青青在线视频| 97视频在线观看网址| 亚洲国产精品久久久久蝴蝶传媒| 亚洲欧美高清视频| 国产66精品久久久久999小说| 99re6在线精品视频免费播放| 欧美性猛交xxx| 久久综合色视频| a v视频在线观看| 中国xxxx性xxxx产国| 无人日本免费视频| www.98色噜噜噜| 色哟哟网站入口亚洲精品| 狠狠干一区二区| 国产乱码精品一区二区三区亚洲人| 成人性生交大片免费看在线播放| 亚洲欧美国产制服动漫| 欧美日韩另类综合| 亚洲色图15p| 美女又爽又黄免费动漫| 国产伦精品一区二区三区在线观看| 一区二区三区免费在线观看| 黄色小说综合网站| 一区二区三区中文在线观看| 国产在线视频你懂的| 好看的中文字幕在线播放| 午夜精品一区二区三区在线播放| 噜噜噜噜噜久久久久久91| 亚洲国产日韩一区无码精品久久久| 色www免费视频| 欧美一级二级视频| 免费的av电影| 538在线一区二区精品国产| 亚洲天堂电影网| x99av成人免费| 久久久久9999亚洲精品| 性刺激综合网| 亚洲r级在线观看| www黄色在线| 污污网站免费看| 日韩美女一级片| 亚洲人辣妹窥探嘘嘘| gogo亚洲国模私拍人体| 在线视频1区2区| 久久不卡国产精品一区二区| 97涩涩爰在线观看亚洲| 中文字幕在线观看日| 看全色黄大色黄大片免责看的| 精品卡一卡卡2卡3网站|