亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Swift > 正文

Swift中使用正則表達式的一些方法

2020-03-09 17:50:10
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了Swift中使用正則表達式的一些方法,Swift語言對正則表達式的支持也在不斷改進中,需要的朋友可以參考下
 

我使用Swift有段時間了,但最讓人郁悶的是它還不能支持正則表達式.

先要說的是,這確實是門新語言,我在網站上有注釋 a radar (rdar://17257306 for Apple folks). 如果你也認同這一觀點,請支持.

我所說的正則表達式指的是這種(Ruby代碼):
 

if name =~ /ski$/ puts "#{name} is probably polish"end

如果要快速查詢,可以使用=~操作符來返回匹配的結果.此外使用/pattern/syntax 形式來直接使用正則. 除了/符號需要轉義,其它符號都不受影響:

 url_pattern = /^https?:////.*/


這比使用//轉義要好得多 (這在正則里很常見). 如果正則里使用了字符串,那看起來會很糟糕.這是Objective-C代碼:
 

復制代碼代碼如下:
NSRegularExpression *regex = [NSRegularExpression
  regularExpressionWithPattern:@"//s+//w{4,10}//s//d+"
                       options:0
                         error:nil];

 

轉義每個/符號讓代碼可讀性變差.  更別提額外類的創建了. 當然,如果需要更強大的正則功能,那就得開發全套的特定實現類了.  但就一般情況來說 (在腳本語言里很常見) 有點小題大做.

Swift是怎么處理的?

Swift目前沒有提供支持正則的語法和類,所以只能使用之前提到的NSRegularExpression來實現.

但是我們可以考慮使用swift的超強操作符來實現. 考慮下面的場景:
 

復制代碼代碼如下:

class Regex {
  let internalExpression: NSRegularExpression
  let pattern: String
 
  init(_ pattern: String) {
    self.pattern = pattern
    var error: NSError?
    self.internalExpression = NSRegularExpression(pattern: pattern, options: .CaseInsensitive, error: &error)
  }
 
  func test(input: String) -> Bool {
    let matches = self.internalExpression.matchesInString(input, options: nil, range:NSMakeRange(0, countElements(input)))
    return matches.count > 0
  }
}

 

這在使用NSRegularExpression時需要提供大量的假設驗證. 如果用另一種方法就簡單多了:

 

復制代碼代碼如下:

if Regex("//w{4}").test("ABCD") {
  println("matches pattern")
}

 

我們還是無可避免的得使用字符串轉義,但比使用原生的NSRegularExpression好多了.

=~ 操作符

研究了一下 Step Christopher 的方法后,我想自己改造一下操作符功能. 看起來挺簡單的:
 

復制代碼代碼如下:

operator infix =~ {}

 

這就定義了操作符的位置,就像操作兩個元素時不是放在它們之間,而是一個元素之前或之后(就像++操作). 下面定義一個使用該操作符的函數:

 

復制代碼代碼如下:

func =~ (input: String, pattern: String) -> Bool {
  return Regex(pattern).test(input)
}

 

復雜的部分是現成的,我們只需要簡單地調用.

最后,使用正則的測試結果如下:

 

復制代碼代碼如下:

let phoneNumber = "(800) 555-1111"
if phoneNumber =~ "(?//d{3})?//s//d{3}-//d{4}" {
  println("That looks like a valid US phone number")
}

 

我覺得這個結果很好,如果有天Apple發現了我的這個正則實現的語法/regex/literal syntax, 我很樂意提供支持.

更新

一個樂于助人的 Hacker News評論家  指出一個更接近我想要的方向,但使用現有的API:
 

復制代碼代碼如下:

if let match = name.rangeOfString("ski$", options: .RegularExpressionSearch) {
  println("/(name) is probably polish")
}

 

的確,我不知道這個,并且看起來非常有用。



注:相關教程知識閱讀請移步到swift教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美整片在线观看| 欧美www视频在线观看| 久久精品99国产精品酒店日本| 日韩精品999| 久久综合网hezyo| 中文字幕综合一区| 日韩精品在线观看网站| 国产欧美精品va在线观看| 17婷婷久久www| 亚洲欧美日韩精品| 欧美色播在线播放| 久久久亚洲福利精品午夜| 亚洲一区二区自拍| 亚洲国产福利在线| 国产精品99免视看9| 欧美激情综合色综合啪啪五月| 国产精品高清在线| 亚洲黄色av网站| 黄色91在线观看| 久久久精品视频在线观看| 黑人巨大精品欧美一区二区免费| 国产91精品久久久久| 久久99青青精品免费观看| 亚洲石原莉奈一区二区在线观看| 日本亚洲欧洲色α| 伦伦影院午夜日韩欧美限制| 欧美亚洲视频在线看网址| 国产精品一区二区久久| 亚洲欧美国产精品久久久久久久| 国产精品1区2区在线观看| 久久午夜a级毛片| 国产视频丨精品|在线观看| 国产精品欧美在线| 色噜噜亚洲精品中文字幕| 亚洲伊人久久综合| 久热精品视频在线观看一区| 欧美性猛交xxxxx水多| 午夜精品久久久久久久99热浪潮| 欧美日韩免费看| 国产精品aaaa| 久久国产精品久久久久久久久久| 欧美大片免费观看| 国产亚洲一区精品| 51精品国产黑色丝袜高跟鞋| 91成人在线观看国产| 俺去了亚洲欧美日韩| 免费av一区二区| 秋霞av国产精品一区| 国产精品女人网站| 国产成人福利夜色影视| 97精品伊人久久久大香线蕉| 精品性高朝久久久久久久| 国产精品成人国产乱一区| 国产欧美日韩精品丝袜高跟鞋| 成人免费观看a| 都市激情亚洲色图| 日韩大胆人体377p| 欧美色视频日本高清在线观看| 中文字幕国产亚洲2019| 97国产精品免费视频| 97成人超碰免| 亚洲电影免费观看高清| 7777免费精品视频| 欧美主播福利视频| 欧美激情视频网| 欧美综合激情网| 91免费高清视频| 日本欧美黄网站| 国产精品视频免费观看www| 最近2019好看的中文字幕免费| 高清在线视频日韩欧美| 欧洲午夜精品久久久| 国产成人精品综合久久久| 日韩大陆毛片av| 97人人做人人爱| 美日韩丰满少妇在线观看| 国产精品视频导航| 久久久精品影院| 久久精品中文字幕| 国产在线观看一区二区三区| 国产成人av在线| 精品久久久久久久久久| 成人免费高清完整版在线观看| 国产亚洲精品一区二555| 日韩欧美国产高清91| 琪琪第一精品导航| 91香蕉嫩草神马影院在线观看| 色七七影院综合| 国产欧美精品日韩精品| 97国产精品免费视频| 国产日韩欧美自拍| 亚洲欧美日韩国产中文| 欧美激情精品久久久久| 久久国产精品视频| 福利视频一区二区| 国产成人小视频在线观看| 欧美精品一区在线播放| 久久久女人电视剧免费播放下载| 宅男66日本亚洲欧美视频| 亚洲国产精品成人一区二区| 国产精品成人一区二区三区吃奶| 成人激情在线播放| 国产精品久久久久久久av大片| 亚洲97在线观看| 成人天堂噜噜噜| 久热在线中文字幕色999舞| 欧美情侣性视频| 欧美精品精品精品精品免费| 亚洲人成亚洲人成在线观看| 久久免费精品日本久久中文字幕| 奇米一区二区三区四区久久| 国产在线高清精品| 亚洲午夜精品久久久久久久久久久久| 欧美成人精品在线| 亚洲a在线播放| 欧美性黄网官网| 成人欧美一区二区三区黑人孕妇| 欧美成人黑人xx视频免费观看| 亚洲最大的免费| 一区二区三区国产在线观看| 欧美第一黄网免费网站| 日韩中文字幕视频| 日韩欧美亚洲成人| 欧美高清无遮挡| 美女精品久久久| 97在线免费观看视频| 久久精品视频在线观看| 久久人人爽人人爽人人片亚洲| 色多多国产成人永久免费网站| 久久6精品影院| 美女少妇精品视频| 97视频网站入口| 久久久影视精品| 久久精品这里热有精品| 日韩欧美精品网站| 欧洲亚洲免费视频| 国产视频精品一区二区三区| 精品久久久香蕉免费精品视频| 亚洲国产欧美一区二区丝袜黑人| 91精品视频网站| 国内精品久久久久伊人av| 国产精品视频精品视频| 国产亚洲精品久久久久久| 午夜精品久久久久久久久久久久久| 91产国在线观看动作片喷水| 亚洲精品有码在线| 一本色道久久88综合日韩精品| 一区国产精品视频| 欧美体内谢she精2性欧美| 亚洲精品国产综合区久久久久久久| 亚洲图片在线综合| 成人网址在线观看| 日韩中文字幕网站| 日韩一区二区精品视频| 国产在线播放不卡| 国产亚洲成av人片在线观看桃| 亚洲大胆美女视频| 91精品国产高清自在线看超| 国产日韩av高清| 亚洲成人黄色在线观看| 久久在精品线影院精品国产| 92看片淫黄大片欧美看国产片| 成人情趣片在线观看免费| 一本色道久久88亚洲综合88|