激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Swift - Swift中使用正則表達(dá)式的一些方法

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

2020-12-21 14:43Swift教程網(wǎng) Swift

這篇文章主要介紹了Swift中使用正則表達(dá)式的一些方法,Swift語言對正則表達(dá)式的支持也在不斷改進(jìn)中,需要的朋友可以參考下

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

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

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

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

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

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


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

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

 

轉(zhuǎn)義每個\符號讓代碼可讀性變差.  更別提額外類的創(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è)驗(yàn)證. 如果用另一種方法就簡單多了:

 

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

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

 

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

=~ 操作符

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

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

operator infix =~ {}

 

這就定義了操作符的位置,就像操作兩個元素時不是放在它們之間,而是一個元素之前或之后(就像++操作). 下面定義一個使用該操作符的函數(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")
}

 

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

更新

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

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

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

 

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

延伸 · 閱讀

精彩推薦
  • SwiftSwift實(shí)現(xiàn)多個TableView側(cè)滑與切換效果

    Swift實(shí)現(xiàn)多個TableView側(cè)滑與切換效果

    這篇文章主要為大家詳細(xì)介紹了Swift實(shí)現(xiàn)多個TableView側(cè)滑與切換效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下...

    乞力馬扎羅的雪雪5822021-01-08
  • SwiftSwift中轉(zhuǎn)義閉包示例詳解

    Swift中轉(zhuǎn)義閉包示例詳解

    在Swift 中的閉包類似于結(jié)構(gòu)塊,并可以在任何地方調(diào)用,下面這篇文章主要給大家介紹了關(guān)于Swift中轉(zhuǎn)義閉包的相關(guān)資料,需要的朋友可以參考下...

    小小小_小朋友11412021-12-26
  • SwiftSwift使用CollectionView實(shí)現(xiàn)廣告欄滑動效果

    Swift使用CollectionView實(shí)現(xiàn)廣告欄滑動效果

    這篇文章主要為大家詳細(xì)介紹了Swift使用CollectionView實(shí)現(xiàn)廣告欄滑動效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下...

    Stevin的技術(shù)博客12372021-01-13
  • Swiftswift where與匹配模式的實(shí)例詳解

    swift where與匹配模式的實(shí)例詳解

    這篇文章主要介紹了swift where與匹配模式的實(shí)例詳解的相關(guān)資料,這里附有簡單的示例代碼,講的比較清楚,需要的朋友可以參考下...

    追到夢的魔術(shù)師14382021-01-06
  • SwiftSwift能代替Objective-C嗎?

    Swift能代替Objective-C嗎?

    這是我在網(wǎng)上上看到的答案,復(fù)制粘貼過來和大家分享一下,因?yàn)槲液秃芏嗳艘粯雍荜P(guān)心Swift的出現(xiàn)對Mac開發(fā)的影響和對Objective-C的影響。...

    Swift教程網(wǎng)4412020-12-16
  • SwiftSwift的74個常用內(nèi)置函數(shù)介紹

    Swift的74個常用內(nèi)置函數(shù)介紹

    這篇文章主要介紹了Swift的74個常用內(nèi)置函數(shù)介紹,這篇文章列舉出了所有的Swift庫函數(shù),內(nèi)置函數(shù)是指無需引入任何模塊即可以直接使用的函數(shù),需要的朋友可...

    Swift教程網(wǎng)5802020-12-19
  • Swiftmac git xcrun error active developer path 錯誤

    mac git xcrun error active developer path 錯誤

    本文主要是講訴了如何解決在mac下使用git;xcode4.6的環(huán)境時,出現(xiàn)了錯誤(mac git xcrun error active developer path)的解決辦法,希望對大家有所幫助...

    Swift教程網(wǎng)2232020-12-16
  • SwiftSwift教程之基礎(chǔ)數(shù)據(jù)類型詳解

    Swift教程之基礎(chǔ)數(shù)據(jù)類型詳解

    這篇文章主要介紹了Swift教程之基礎(chǔ)數(shù)據(jù)類型詳解,本文詳細(xì)講解了Swift中的基本數(shù)據(jù)類型和基本語法,例如常量和變量、注釋、分號、整數(shù)、數(shù)值類型轉(zhuǎn)換等...

    Swift教程網(wǎng)5162020-12-18
主站蜘蛛池模板: 日韩黄在线观看 | 粉嫩粉嫩一区二区三区在线播放 | 国产精品亚洲激情 | 欧美 videos粗暴 | 欧美日本色 | 欧美综合在线观看视频 | 国产精品99久久99久久久二 | 精品成人免费视频 | 国产69精品久久久久久野外 | 中文字幕在线不卡视频 | 中文字幕四区 | 国产一区二区免费在线观看 | 久久一本日日摸夜夜添 | 日韩大片在线永久观看视频网站免费 | 久久国精品 | 久久精品一级片 | 美国av片在线观看 | 久久久久电影网站 | 欧美视频在线一区二区三区 | 激情午夜天 | 久久激情国产 | 欧美一级视屏 | 又黄又爽免费无遮挡在线观看 | 日韩激情| 久久久噜噜噜久久熟有声小说 | 黄色网址电影 | 成人一级毛片 | avhd101高清在线迷片麻豆 | 日韩2区| 不卡国产一区二区三区四区 | www.狠狠操.com | 91精品久久久久久久 | 久久久久日本精品一区二区三区 | 成人在线观看一区二区 | 毛片视 | 久久金品 | 久久久久免费电影 | 成av人在线观看 | 久久99精品久久久久久秒播蜜臀 | 久久久日韩精品一区二区三区 | www国产成人免费观看视频,深夜成人网 |