swift中自定義正則表達(dá)式運(yùn)算符=~詳解
什么是正則表達(dá)式?
正則表達(dá)式,又稱正規(guī)表示法、常規(guī)表示法(英語:Regular Expression,在代碼中常簡(jiǎn)寫為regex、regexp或RE),計(jì)算機(jī)科學(xué)的一個(gè)概念。正則表達(dá)式使用單個(gè)字符串來描述、匹配一系列符合某個(gè)句法規(guī)則的字符串。在很多文本編輯器里,正則表達(dá)式通常被用來檢索、替換那些符合某個(gè)模式的文本。
swift 至今并沒有在語言層面上支持正則表達(dá)式,可能在開發(fā)app時(shí)正則表達(dá)式使用的場(chǎng)景并不多。
封裝
在 Cocoa 中我們可以使用 NSRegularExpression 來做正則匹配,所以我們?cè)?NSRegularExpression 的基礎(chǔ)上封裝一個(gè) RegularExpHelper 配匹一個(gè)字符串是否符合某個(gè)正則表達(dá)式。
struct RegularExpHelper { let RegularExp: NSRegularExpression init(_ pattern: String) throws { try RegularExp = NSRegularExpression(pattern: pattern, options: .caseInsensitive) } func match(inpuut: String) -> Bool { let matches = RegularExp.matches(in: inpuut, options: [], range: NSMakeRange(0, inpuut.count)) return matches.count > 0 } }
自定義 =~
有了封裝好的 RegularExpHelper,我們就可以方便的自定義運(yùn)算符了。
infix operator =~ : ATPrecedence precedencegroup ATPrecedence { associativity: none higherThan: AdditionPrecedence lowerThan: MultiplicationPrecedence } func =~ (input: String, RegularExp: String) -> Bool { do { return try RegularExpHelper(RegularExp).match(inpuut: input) } catch _ { return false } }
運(yùn)算符定義
- infix 表示定義一個(gè)中位操作符(前后都是輸入)
- prefix 表示定義一個(gè)前位操作符(前是輸入)
- postfix 表示定義一個(gè)后位操作符(后是輸入)
associativity 結(jié)合律
即多個(gè)同類的操作符順序出現(xiàn)時(shí)的計(jì)算順序
- left (從左往右的順序)
- right(從右往左的順序)
- none(默認(rèn)就為 none,不會(huì)再結(jié)合)
優(yōu)先級(jí)
- higherThan 優(yōu)先級(jí)高于 AdditionPrecedence 這個(gè)是加法的類型
- lowerThan 優(yōu)先級(jí)低于 MultiplicationPrecedence 乘除
然后我們就可以使用了
if "88888888@qq.com" =~ "^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,6})$" { print("符合郵箱規(guī)則") } else { print("不符合郵箱規(guī)則") }
注意
- 使用正則表達(dá)式字符串時(shí)注意轉(zhuǎn)義字符的使用。
- swift 的操作符是不能定義在局部域中的,因?yàn)椴僮鞣切枰谌址秶鷥?nèi)使用的。
- 重載和自定義操作符存在很多風(fēng)險(xiǎn),使用前請(qǐng)多問問自己是否真的需要這么做!
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Swift 使用 Observe 監(jiān)測(cè)頁面滾動(dòng)的實(shí)現(xiàn)方法
這篇文章主要介紹了Swift 使用 Observe 監(jiān)測(cè)頁面滾動(dòng)的實(shí)現(xiàn)方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05通過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理解二叉堆數(shù)據(jù)結(jié)構(gòu)及Swift的堆排序算法實(shí)現(xiàn)示例
二插堆即是完全二叉樹,對(duì)于排序可以按構(gòu)建最大堆或最小堆的方式來實(shí)現(xiàn),這里我們就來共同理解二叉堆數(shù)據(jù)結(jié)構(gòu)及Swift的堆排序算法實(shí)現(xiàn)示例2016-07-07swift 錯(cuò)誤處理do catch try try!使用詳解
這篇文章主要介紹了swift 錯(cuò)誤處理do catch try try!使用詳解的相關(guān)資料,需要的朋友可以參考下2023-03-03switch多選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)示例詳解
這篇文章主要介紹了switch多選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu),本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-12-12倉庫模式及其在Swift?項(xiàng)目中的應(yīng)用詳解
這篇文章主要為大家介紹了倉庫模式及其在Swift?項(xiàng)目中的應(yīng)用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01