一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

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

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

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

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

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

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

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

我所說的正則表達式指的是這種(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)然,如果需要更強大的正則功能,那就得開發(fā)全套的特定實現(xiàn)類了.  但就一般情況來說 (在腳本語言里很常見) 有點小題大做.

Swift是怎么處理的?

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

但是我們可以考慮使用swift的超強操作符來實現(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è)驗證. 如果用另一種方法就簡單多了:

 

復(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)了我的這個正則實現(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實現(xiàn)多個TableView側(cè)滑與切換效果

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

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

    乞力馬扎羅的雪雪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實現(xiàn)廣告欄滑動效果

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

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

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

    swift where與匹配模式的實例詳解

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

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

    Swift能代替Objective-C嗎?

    這是我在網(wǎng)上上看到的答案,復(fù)制粘貼過來和大家分享一下,因為我和很多人一樣很關(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ù)類型詳解,本文詳細講解了Swift中的基本數(shù)據(jù)類型和基本語法,例如常量和變量、注釋、分號、整數(shù)、數(shù)值類型轉(zhuǎn)換等...

    Swift教程網(wǎng)5162020-12-18
主站蜘蛛池模板: 国产精品嫩草影院在线看 | 四虎1515hhh co m| 91夜夜操| 国内久久精品视频 | 高清毛片一区二区三区 | 羞羞漫画免费漫画页面在线看漫画秋蝉 | 天堂精品高清1区2区3区 | aa视频免费| 国产福利在线观看第二区 | 精品国产三级av在线 | 久久久久久久99精品免费观看 | 久久这里只有精品国产精品99 | 国产成人精品本亚洲 | 国产一及毛片 | 国产精品视频第一区二区 | 羞羞色男人的天堂伊人久久 | 我和老丈洗澡同性 | 国产午夜精品久久理论片小说 | 国模娜娜a4u1546全套 | 黑人性xxx| 末发育xxxxx仙踪林 | 久久精品国产只有精品 | 午夜影院免费入口 | 99久久精品99999久久 | 国产一区日韩二区欧美三区 | 青青草99热久久 | 国产精品免费综合一区视频 | 91美女在线视频 | 糖心vlog麻豆精东影业传媒 | 农夫成人网 | 男人猛进猛出女人下面视频 | 欧美xxoo黑人又粗暴 | 国产3344视频在线观看免费 | 亚欧成人中文字幕一区 | 精品日韩欧美一区二区三区在线播放 | 欧美一区二区三区视视频 | 男女性刺激爽爽免费视频 | 嗯啊好大视频 | 扒开老师两片湿漉的肉 | 国产福利一区二区在线精品 | 亚洲品质自拍网站 |