国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Swfit 使用正則表達式

這篇具有很好參考價值的文章主要介紹了Swfit 使用正則表達式。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Swift 使用正則表達式

Swift 中可以通過多種方式進行正則使用和匹配。每一種情況的應(yīng)用場景都不一樣,可選擇一種適合自己的。

Tip:使用 Raw String 定義正則表達式,可以減少使用轉(zhuǎn)義符號\

普通字符串正則:let pattern = “\\d{3,11}”

擴展分隔符正則:let pattern = #“\d{3,11}”#

通過 NSpredicate 匹配正則(不推薦)

let email = "lifusc464@qq.com"
let regex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"
let predicate = NSPredicate(format: "SELF MATCHES %@", regex)
let isValid = predicate.evaluate(with: email)
print(isValid ? "正確的郵箱地址" : "錯誤的郵箱地址")

利用String的RangeOfString: option: 直接查找

    let email = "lifusc148387@qq.com"
    let rangeindex = email.range(of: "[0-9]{4}", options: .regularExpression, range: email.startIndex..<email.endIndex, locale:Locale.current)
    print(email.substring(with: rangeindex!)) //輸出;1483
   注意使用的option參數(shù)為regularExpression  , 還有range參數(shù)是一個半閉String.index    location指的是語言環(huán)境,一般為current 

NSRegularExpression

NSRegularExpression 類可以用于正則配對和正則替換

正則匹配
/**
     正則表達判斷是否含有結(jié)果值
     
     - parameter pattern: 一個字符串類型的正則表達式
     parameter str: 需要比較判斷的對象
     - returns: 返回布爾值判斷結(jié)果
     warning: 注意匹配到結(jié)果的話就會返回true,沒有匹配到結(jié)果就會返回false
     */
    class func regex(pattern:String, str:String) -> Bool {
        let regex = try! NSRegularExpression(pattern: pattern, options:[NSRegularExpression.Options.caseInsensitive])
        let resultNum = regex.numberOfMatches(in: str, options: NSRegularExpression.MatchingOptions(rawValue: 0) , range: NSMakeRange(0, str.characters.count))
        if resultNum>=1 {
            return true
        }
        return false
    }
    
    /**
     正則表達式獲取目的值
     
     - parameter pattern: 一個字符串類型的正則表達式
     parameter str: 需要比較判斷的對象
     - imports: 這里子串的獲取先轉(zhuǎn)話為NSString的[以后處理結(jié)果含NS的還是可以轉(zhuǎn)換為NS前綴的方便]
     returns: 返回目的字符串結(jié)果值數(shù)組(目前將String轉(zhuǎn)換為NSString獲得子串方法較為容易)
     - warning: 注意匹配到結(jié)果的話就會返回true,沒有匹配到結(jié)果就會返回false
     */
    class func regexGetSub(pattern:String, str:String) -> [String] {
        var subStr = [String]()
        let regex = try! NSRegularExpression(pattern: pattern, options:[NSRegularExpression.Options.caseInsensitive])
        let results = regex.matches(in: str, options: NSRegularExpression.MatchingOptions.init(rawValue: 0), range: NSMakeRange(0, str.characters.count))
        //解析出子串
        for  rst in results {
            let nsStr = str as  NSString  //可以方便通過range獲取子串
            subStr.append(nsStr.substring(with: rst.range))
            //str.substring(with: Range<String.Index>) //本應(yīng)該用這個的,可以無法直接獲得參數(shù),必須自己手動獲取starIndex 和 endIndex作為區(qū)間
        }
        return subStr
    }
正則替換
 func replaceString() {
        let givenString = "hello,world"
        guard let regularExpression = try? NSRegularExpression(pattern: "hello") else { return }
        let replacedString = regularExpression.stringByReplacingMatches(in: givenString, range: NSRange(location: 0, length: givenString.utf16.count), withTemplate: "你好")
        print(replacedString)
  }

不能使用先匹配,循環(huán)匹配結(jié)果來替換,會因為 range 不一致導(dǎo)致替換異常。

NSRange初始化 length參數(shù)為什么是字符串的 utf16.count?

這樣可以避免 emoji 和類似的長度計算錯誤問題

NSRegularExpression.Options枚舉

初始化正則的 option 項參數(shù)

枚舉 描述 示例
caseInsensitive 不區(qū)分大小寫 Aa相當于 aa
allowCommentsAndWhitespace 忽略空格和#(注釋) A B#CC 相當于 AB
ignoreMetacharacters 整體化 "AA\b"其中的\b不會當成匹配邊界,而是字符串
dotMatcheshLineSeparators 允許.匹配任何字符,包括行分隔符 “a.b"可以匹配"a\nb”
dotMatchesLines 允許^和$匹配行的開頭和結(jié)尾
useUnixLineSeparators 僅將\n視為行分隔符,否則,將使用所有標準行分隔符
useUnicodeWordBoundaries 使用Unicode TR#29指定單詞邊界,否則,使用傳統(tǒng)的正則表達式單詞邊界
MathchingFlags

該枚舉主要用于遍歷閉包匹配方法enumerateMatches(in:options:range:using:)的閉包回調(diào)參數(shù)中

typedef NS_OPTIONS(NSUInteger, NSMatchingFlags) {
   //還在長時間的匹配中
   NSMatchingProgress               = 1 << 0,  
   //匹配已經(jīng)完成
   NSMatchingCompleted              = 1 << 1,  
   //當前匹配操作到達搜索范圍的末尾     
   NSMatchingHitEnd                 = 1 << 2,  
   //當前匹配項取決于搜索范圍末端的位置    
   NSMatchingRequiredEnd            = 1 << 3, 
   //由于內(nèi)部錯誤而導(dǎo)致匹配失敗而沒有檢查整個搜索范圍   
   NSMatchingInternalError          = 1 << 4     
};
MatchingOptions枚舉

該枚舉主要用于遍歷閉包匹配方法enumerateMatches(in:options:range:using:)的參數(shù)

typedef NS_OPTIONS(NSUInteger, NSMatchingOptions) {
   //在長時間的匹配操作期間,定期回調(diào)一次。
   NSMatchingReportProgress         = 1 << 0,       
   //當匹配完成時,回調(diào)一次。
   NSMatchingReportCompletion       = 1 << 1,
   //只能匹配查詢范圍開始處的字符串  "aa"只能匹配"aabcd",而不能匹配"baabcd"       
   NSMatchingAnchored               = 1 << 2,      
   //允許匹配超出搜索范圍的范圍,例如文字邊界檢測,前瞻等。如果搜索范圍包含整個字符串,該選項將不起作用 
   NSMatchingWithTransparentBounds  = 1 << 3,      
   //防止^和$自動匹配搜索范圍的開始和結(jié)束,如果搜索范圍包含整個字符串,該選項 將不起作用 
   //"^ab"默認能匹配NSMakeRange(1, 3)]范圍上的"babcd"
   //當使用該選項時,則不能匹配 
   NSMatchingWithoutAnchoringBounds = 1 << 4 
};

常用的就是這三種方式中使用正則表達式字符串 ,其中第一、二種較為方便的判斷是否含有值,和只匹配一次的情況,而第三種可以匹配返回多個目的值。

正則語言速預(yù)覽

NSRegularExpression 正則語法 – Apple 官方

正則表達式語法 – 菜鳥教程

在線正則–regular expresssions可以標記組和各項匹配,還可以進行正則語法檢查。

JS 正則表達式完整教程–掘金詳細介紹正則的基本和高級使用

Swfit 使用正則表達式

匹配所有字符:[\s\S]

分組

通過()可以進行分組標記,在匹配成功后,可以通過下表來獲取到對應(yīng)組的值。

示例:獲取匹配到的年月日

func regularExpressionGroup() {
        let givenString = "2022-04-28"
        guard let regularExpression = try? NSRegularExpression(pattern: #"(\d{4,})-(\d{1,2})-(?<day>\d{1,2})"#) else { return }
        let results = regularExpression.matches(in: givenString, range: NSRange(location: 0, length: givenString.utf16.count))
        for result in results {
            //let all = result.range(at: 0)  // 匹配到的整個字符串
            let yearRange = result.range(at: 1) //匹配到的組1
            print("年")
            print(givenString[Range<String.Index>.init(yearRange, in: givenString)!])
            let monthRange = result.range(at: 2)
            print("月")
            print(givenString[Range<String.Index>.init(monthRange, in: givenString)!])
            let dayRange = result.range(withName: "day")
            print("日")
            print(givenString[Range<String.Index>.init(dayRange, in: givenString)!])
            
        }
    }

建議通過 name 來定義組

自定義組名的使用方式為(?<name>子表達式)

嵌套組怎么確定 index?

以左邊括號(為次序

不想捕獲組怎么辦?

可以在左括號后添加?:

比如(?:\d)-(\d),這樣第一個括號就不會被捕獲。

零寬度斷點

零寬度斷點:它匹配的內(nèi)容不會提取,而是匹配到的一個位置。

主要應(yīng)用場景如下:

  • 排除查找,查找不包含有某段字符串的行
  • 包含查找,查找包含某段字符串的行

正則表達式-零度斷言包含使用場景,使用介紹和示例,通過先匹配后檢查來簡單區(qū)分各種不同的零度斷言。

貪婪/非貪婪匹配

在表中,有一項為量詞,默認都是貪婪匹配,即按照最多情況匹配到,而通過在量詞后添加?即可實現(xiàn)非貪婪匹配。

比如待匹配文本:a,b,c,d,

貪婪匹配:.*,

結(jié)果為:a,b,c,d, 只能匹配到1項

Swfit 使用正則表達式

非貪婪匹配:.*?,

結(jié)果為:a, b, c, d, 能匹配到4項

Swfit 使用正則表達式文章來源地址http://www.zghlxwxcb.cn/news/detail-421497.html

到了這里,關(guān)于Swfit 使用正則表達式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 04 - 慎重使用正則表達式

    04 - 慎重使用正則表達式

    在講 String 對象優(yōu)化時,提到了 Split() 方法,該方法使用的正則表達式可能引起回溯問題,今天就來深入了解下,這究竟是怎么回事? 開始之前,我們先來看一個案例,可以幫助你更好地理解內(nèi)容。 在一次小型項目開發(fā)中,我遇到過這樣一個問題。為了宣傳新品,我們開發(fā)了

    2024年02月15日
    瀏覽(21)
  • C#正則表達式的使用

    C#正則表達式的使用

    如果不引用則寫成 System.Text.RegularExpressions.Regex 使用方法如下: 符號 含義 d 0-9的數(shù)字 D d的補集,所有非數(shù)字的字符(同[^0-9]) w 單詞字符,指大小寫字母、0-9數(shù)字、下劃線 W w的補集 s 空白字符,包括換行符n、回車符r、制表符t、垂直制表符v、換頁符f S s的補集

    2024年02月08日
    瀏覽(24)
  • 使用正則表達式設(shè)置強密碼

    強密碼需要同時含有大寫字母、小寫字母、數(shù)字、特殊符號。 這邊先展示我自己寫的。 以上代8位以上的強密碼。 下面是具體解析: 正則表達式測試工具里可以自行檢測寫的對不對 目前較為簡便的一種使用方法是搭配ApiModel和Pattern對變量進行配置。 如

    2024年02月14日
    瀏覽(24)
  • 使用正則表達式驗證銀行帳號

    銀行帳號是在任何特定銀行開設(shè)賬戶后分配給賬戶持有人的唯一編號。從技術(shù)上講,我們可以將銀行帳號視為主鍵。銀行帳號使我們能夠進行借記、貸記和其他交易。根據(jù) RBI 指南,銀行帳號具有獨特的結(jié)構(gòu)。Account Number的結(jié)構(gòu)如下: 銀行帳號僅以數(shù)字形式書寫。 銀行帳號長

    2023年04月22日
    瀏覽(21)
  • Jmeter接口關(guān)聯(lián)(三)【使用正則表達式提取值】以及正則表達式提取器中模板的含義及用法

    Jmeter接口關(guān)聯(lián)(三)【使用正則表達式提取值】以及正則表達式提取器中模板的含義及用法

    文章目錄 前言 一、Jmeter中使用正則表達式匹配 1、選擇 RegExp Tester 2、在線程組------》添加------》后置處理器-------里面添加一個“正則表達式提取器” 二、關(guān)于正則表達式提取器里面字段的解釋 參數(shù)說明 三、進一步解釋Jmeter正則表達式提取器中的模板 1、當模板設(shè)置為$0$?

    2024年02月13日
    瀏覽(51)
  • Java中正則表達式的使用

    Regular Expression , 正則表達式, ?種使?表達式的?式對字符串 進?匹配的語法規(guī)則 由一組持有特殊含義的字符串組成,通常用于匹配和替換文本 正則的優(yōu)點: 速度快, 效率?, 準確性? 正則的缺點: 新?上?難度有 點?? 常見元字符 編號 元字符 匹配功能 1 . 匹配除換?符

    2024年02月07日
    瀏覽(65)
  • Java使用正則表達式-驗證郵箱

    正則表達式通常被用于判斷語句中,用來檢查某一個字符串是否滿足某一格式。正則表達式是含有一些具有特殊意義字符的字符串。 幾種常用的正則表達式元字符: . 代表任意一個字符 \\\\d 代表0-9的如何一個數(shù)字 \\\\D 代表任何一個非數(shù)字字符 \\\\s 代表空白字符 如\\\'t\\\'、\\\'n\\\' \\\\S 代表

    2024年02月08日
    瀏覽(25)
  • 正則表達式概念以及語法的使用

    正則表達式概念以及語法的使用

    目錄 1.概念 2. 為什么使用正則表達式? 3. 語法 1.普通字符 非打印字符 2. 特殊字符 3. 限定符 4. 定位符 5. 運算優(yōu)先級 3.匹配規(guī)則 1. 基本模式匹配 2. 字符簇 3. 確定重復(fù)出現(xiàn) 正則表達式(Regular Expression) 是一種文本模式 , 包括普通字符(例如,a 到 z 之間的字母) 和特殊字符(

    2024年02月16日
    瀏覽(21)
  • MFC使用正則表達式基礎(chǔ)步驟

    ①頭文件包含 #include ②明確聲明正則表達式 更多正則表達式可查閱:https://blog.csdn.net/Next_Second/article/details/126696589 ③CString 轉(zhuǎn)string ④進行匹配 完整函數(shù)

    2024年02月16日
    瀏覽(19)
  • 正則表達式 re庫的使用

    模式 描述 ^ 匹配 字符串的開始 w 匹配 字母數(shù)字及下劃線 W 匹配 非 字母數(shù)字及下劃線 s 匹配 任意空白字符,即空格 S 匹配 任意 非空 字符 d 匹配 任意數(shù)字,等價于[0-9], d+ 表示匹配多個數(shù)字 D 匹配 任意 非 數(shù)字 A 匹配字符串開始 Z 匹配字符串結(jié)束,如果是存在換行,

    2024年02月10日
    瀏覽(59)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包