最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

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

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


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

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

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

Swift是怎么處理的?

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

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

復(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)證. 如果用另一種方法就簡(jiǎn)單多了:

 

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

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

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

=~ 操作符

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

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

operator infix =~ {}

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

 

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

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

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

最后,使用正則的測(cè)試結(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評(píng)論家  指出一個(gè)更接近我想要的方向,但使用現(xiàn)有的API:
 

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

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

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

相關(guān)文章

  • Swift?reduce函數(shù)使用示例詳解

    Swift?reduce函數(shù)使用示例詳解

    這篇文章主要為大家介紹了Swift?reduce函數(shù)使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Swift算法實(shí)現(xiàn)字符串轉(zhuǎn)數(shù)字的方法示例

    Swift算法實(shí)現(xiàn)字符串轉(zhuǎn)數(shù)字的方法示例

    最近學(xué)完了swift想著實(shí)踐下,就通過一些簡(jiǎn)單的算法進(jìn)行學(xué)習(xí)研究,下面這篇文章主要介紹了Swift算法實(shí)現(xiàn)字符串轉(zhuǎn)數(shù)字的方法,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-03-03
  • 詳細(xì)講解Swift中的類型占位符

    詳細(xì)講解Swift中的類型占位符

    類型占位符是swift5.6中引?的?個(gè)新功能,在處理稍微復(fù)雜的通?類型時(shí),它可能真的很有用,這篇文章主要給大家介紹了關(guān)于Swift類型占位符的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • RxSwift學(xué)習(xí)教程之基礎(chǔ)篇

    RxSwift學(xué)習(xí)教程之基礎(chǔ)篇

    RxSwift是Swift函數(shù)響應(yīng)式編程的一個(gè)開源庫,由Github的ReactiveX組織開發(fā),維護(hù)。下面這篇文章主要給大家介紹了關(guān)于RxSwift學(xué)習(xí)之基礎(chǔ)篇的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-09-09
  • openstack重啟swift服務(wù)后報(bào)錯(cuò)問題解決方案

    openstack重啟swift服務(wù)后報(bào)錯(cuò)問題解決方案

    這篇文章主要介紹了解決openstack重啟swift服務(wù)后報(bào)錯(cuò),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • 如何刪掉編程中的?Switch?語句

    如何刪掉編程中的?Switch?語句

    多重方法是一種有趣的方式,可以幫你擺脫令人討厭的?switch,這篇文章主要介紹了如何刪掉編程中的?Switch?語句,需要的朋友可以參考下
    2022-09-09
  • 蘋果公司編程語言Swift語言簡(jiǎn)介

    蘋果公司編程語言Swift語言簡(jiǎn)介

    這篇文章主要介紹了蘋果公司編程語言Swift語言簡(jiǎn)介,Swift 是一門新的編程語言,兼容Objective-C代碼,是用來代替Objective-C的蘋果主力開發(fā)語言,需要的朋友可以參考下
    2014-07-07
  • 通過Notification.Name看Swift是如何優(yōu)雅的解決String硬編碼

    通過Notification.Name看Swift是如何優(yōu)雅的解決String硬編碼

    這篇文章主要給大家介紹了通過Notification.Name看Swift是如何優(yōu)雅的解決String硬編碼的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08
  • 淺談Swift編程中switch與fallthrough語句的使用

    淺談Swift編程中switch與fallthrough語句的使用

    這篇文章主要介紹了Swift編程中switch與fallthrough語句的使用,用于基本的流程控制,需要的朋友可以參考下
    2015-11-11
  • Swift4使用GCD實(shí)現(xiàn)計(jì)時(shí)器

    Swift4使用GCD實(shí)現(xiàn)計(jì)時(shí)器

    這篇文章主要為大家詳細(xì)介紹了Swift4使用GCD實(shí)現(xiàn)計(jì)時(shí)器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03

最新評(píng)論

特克斯县| 江川县| 东乡| 惠安县| 莱芜市| 大竹县| 黄陵县| 绥化市| 大安市| 长乐市| 西华县| 吉安县| 花垣县| 安吉县| 茂名市| 富顺县| 黔江区| 蓝田县| 兴文县| 金寨县| 滕州市| 于都县| 依安县| 寻甸| 兴安县| 井陉县| 永善县| 通州市| 贞丰县| 长宁区| 郴州市| 商南县| 二连浩特市| 潜山县| 白河县| 清流县| 揭阳市| 孟村| 惠安县| 淮北市| 岳西县|