欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Swift中使用正則表達(dá)式的一些方法

 更新時(shí)間:2015年07月16日 11:02:10   投稿:goldensun  
這篇文章主要介紹了Swift中使用正則表達(dá)式的一些方法,Swift語言對正則表達(dá)式的支持也在不斷改進(jìn)中,需要的朋友可以參考下

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

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

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

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

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

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


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

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

轉(zhuǎn)義每個(gè)\符號讓代碼可讀性變差.  更別提額外類的創(chuàng)建了. 當(dāng)然,如果需要更強(qiáng)大的正則功能,那就得開發(fā)全套的特定實(shí)現(xiàn)類了.  但就一般情況來說 (在腳本語言里很常見) 有點(diǎn)小題大做.

Swift是怎么處理的?

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

但是我們可以考慮使用swift的超強(qiáng)操作符來實(shí)現(xiàn). 考慮下面的場景:
 

復(fù)制代碼 代碼如下:

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時(shí)需要提供大量的假設(shè)驗(yàn)證. 如果用另一種方法就簡單多了:

 

復(fù)制代碼 代碼如下:

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

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

=~ 操作符

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

復(fù)制代碼 代碼如下:

operator infix =~ {}

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

 

復(fù)制代碼 代碼如下:

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

復(fù)雜的部分是現(xiàn)成的,我們只需要簡單地調(diào)用.

最后,使用正則的測試結(jié)果如下:

 

復(fù)制代碼 代碼如下:

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

我覺得這個(gè)結(jié)果很好,如果有天Apple發(fā)現(xiàn)了我的這個(gè)正則實(shí)現(xiàn)的語法/regex/literal syntax, 我很樂意提供支持.

更新

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

復(fù)制代碼 代碼如下:

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

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

相關(guān)文章

  • 詳解Swift語言中的類與結(jié)構(gòu)體

    詳解Swift語言中的類與結(jié)構(gòu)體

    這篇文章主要介紹了Swift語言中的類與結(jié)構(gòu)體,是Swift入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-11-11
  • SwiftUI自定義導(dǎo)航的方法實(shí)例

    SwiftUI自定義導(dǎo)航的方法實(shí)例

    導(dǎo)航是我們平時(shí)經(jīng)常會遇到的一個(gè)需求,下面這篇文章主要給大家介紹了關(guān)于SwiftUI自定義導(dǎo)航的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • iOS Swift UICollectionView橫向分頁滾動,cell左右排版問題詳解

    iOS Swift UICollectionView橫向分頁滾動,cell左右排版問題詳解

    UICollectionView是iOS中比較常見的一個(gè)控件,這篇文章主要給大家介紹了關(guān)于iOS Swift UICollectionView橫向分頁滾動,cell左右排版問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • Objective-C和Swift的轉(zhuǎn)換速查手冊(推薦)

    Objective-C和Swift的轉(zhuǎn)換速查手冊(推薦)

    這篇文章主要給大家介紹了關(guān)于Objective-C和Swift的轉(zhuǎn)換速查手冊的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),非常推薦給大家參考學(xué)習(xí)使用,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)不
    2018-06-06
  • Swift與Objective C的簡單對比

    Swift與Objective C的簡單對比

    很多人想學(xué)習(xí)iOS開發(fā),但是不知道如何從Objective-C和Swift之間選擇。而網(wǎng)上的一些答案,大抵說的是,以后Swift終將取代Objective-C,但是目前來講還是Objective-C比較重要。那么究竟怎樣呢,今天我們就來探討下
    2016-12-12
  • Swift開發(fā)之UITableView狀態(tài)切換效果

    Swift開發(fā)之UITableView狀態(tài)切換效果

    這篇文章主要介紹了Swift開發(fā)之UITableView狀態(tài)切換效果的相關(guān)資料,非常不錯,具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-08-08
  • Swift縮放并填充圖片功能的實(shí)現(xiàn)

    Swift縮放并填充圖片功能的實(shí)現(xiàn)

    最近有一個(gè)需求,就是將圖片先等比例縮放到指定大小,然后將空余出來空間填充為黑色,返回指定大小的圖片。本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-11-11
  • Swift?Sequence?Collection使用示例學(xué)習(xí)

    Swift?Sequence?Collection使用示例學(xué)習(xí)

    這篇文章主要為大家介紹了Swift?Sequence?Collection使用示例學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Swift中非可選的可選值類型處理方法詳解

    Swift中非可選的可選值類型處理方法詳解

    Optional是Objective-C沒有的數(shù)據(jù)類型,是蘋果引入到Swift語言中的全新類型,它的特點(diǎn)就和它的名字一樣:可以有值,也可以沒有值,當(dāng)它沒有值時(shí),就是nil。下面這篇文章主要給大家介紹了關(guān)于Swift中非可選的可選值類型處理方法的相關(guān)資料,需要的朋友可以參考下。
    2017-11-11
  • 解析Swift中的泛型支持與使用

    解析Swift中的泛型支持與使用

    支持泛型意味著可以在規(guī)定參數(shù)類型的情況下更靈活地編寫程序,也是Swift語言先進(jìn)而又強(qiáng)大的體現(xiàn),這里我們就來解析Swift中的泛型支持與使用:
    2016-07-07

最新評論