正則表達(dá)式

語(yǔ)法規(guī)則

  • 1 集合
[xyz]       字符集合(x/y或z)
[a-z]       字符范圍
[^xyz]      負(fù)值字符集合 (任何字符, 除了xyz)
[^a-z]      負(fù)值字符范圍
[a-d][m-p]  并集(a到d 或 m到p)
  • 常用元字符
.           匹配除換行符以外的任意字符
^           匹配字符串的開始
$           匹配字符串的結(jié)束
\w          匹配字母或數(shù)字或下劃線或漢字 [a-zA-Z_0-9]
\s          匹配任意的空白符(空格、TAB\t、回車\r \n)
\d          匹配數(shù)字 [0-9]
\b          匹配單詞的開始或結(jié)束
  • 常用反義符
\W          匹配任意不是字母,數(shù)字,下劃線,漢字的字符[^\w]
\S          匹配任意不是空白符的字符 [^\s]
\D          匹配任意非數(shù)字的字符[^0-9]
\B          匹配不是單詞開頭或結(jié)束的位置
[^x]        匹配除了x以外的任意字符
[^aeiou]    匹配除了aeiou這幾個(gè)字母以外的任意字符
  • 常用限定符
*           重復(fù)零次或更多次
+           重復(fù)一次或更多次
?           重復(fù)零次或一次
{n}         重復(fù)n次
{n,}        重復(fù)n次或更多次
{n,m}       重復(fù)n到m次,
  • 貪婪和懶惰
*?          重復(fù)任意次,但盡可能少重復(fù)
*+          重復(fù)1次或更多次,但盡可能少重復(fù)
??          重復(fù)0次或1次,但盡可能少重復(fù)
{n,m}?      重復(fù)n到m次,但盡可能少重復(fù)
{n,}?       重復(fù)n次以上,但盡可能少重復(fù)

代碼示例

示例 1

private func check(str: String) {
        // 使用正則表達(dá)式一定要加try語(yǔ)句
        do {
            // - 1、創(chuàng)建規(guī)則
            let pattern = "[1-9][0-9]{4,14}"
            // - 2、創(chuàng)建正則表達(dá)式對(duì)象
            let regex = try NSRegularExpression(pattern: pattern, options: NSRegularExpressionOptions.CaseInsensitive)
            // - 3、開始匹配
            let res = regex.matchesInString(str, options: NSMatchingOptions(rawValue: 0), range: NSMakeRange(0, str.characters.count))
            // 輸出結(jié)果
            for checkingRes in res {
                print((str as NSString).substringWithRange(checkingRes.range))
            }
        }
        catch {
            print(error)
        }
    }

示例 2 : 至少包括字母數(shù)字固定字符中任意2種組成長(zhǎng)度8-12的正則表達(dá)式

private func check(str: String) {
        // 使用正則表達(dá)式一定要加try語(yǔ)句
        do {
            // - 1、創(chuàng)建規(guī)則
            let pattern = "(?!^(\\d+|[a-zA-Z]+|[()!\"#$%&'()*+,-./:;<=>?@\\[\\]\\^_`{|}~]+)$)^[\\w()!\"#$%&'()*+,-./:;<=>?@\\[\\]\\^_`{|}~]{8,12}$"
            // - 2、創(chuàng)建正則表達(dá)式對(duì)象
            let regex = try NSRegularExpression(pattern: pattern, options: NSRegularExpressionOptions.CaseInsensitive)
            // - 3、開始匹配
            let res = regex.matchesInString(str, options: NSMatchingOptions(rawValue: 0), range: NSMakeRange(0, str.characters.count))
            // 輸出結(jié)果
            for checkingRes in res {
                print((str as NSString).substringWithRange(checkingRes.range))
            }
        }
        catch {
            print(error)
        }
    }

解釋

    ?! 零寬度斷言,匹配但是不占用寬度
    \d: 匹配一個(gè)數(shù)字字符;
    \d+:匹配數(shù)字字符一次或多次
    |:或者 相當(dāng)于Or
    [a-zA-Z]+:匹配字母一次或多次
    [()!\"#$%&'()*+,-./:;<=>?@\\[\\]\\^_`{|}~]+:匹配特殊字符一次或多次
    (?!^(\\d+|[a-zA-Z]+|[()!\"#$%&'()*+,-./:;<=>?@\\[\\]\\^_`{|}~]+)$):匹配第一種
    
    \w:匹配包括下劃線的任何單詞字符。類似但不等價(jià)于“[A-Za-z0-9_]”
   ()!\"#$%&'()*+,-./:;<=>?@\\[\\]\\^_`{|}~:匹配特殊字符
    {8,12}:最少匹配7次最多匹配20次
    ^[\\w()!\"#$%&'()*+,-./:;<=>?@\\[\\]\\^_`{|}~]{8,12}$:匹配第二種

參考連接
iOS中的謂詞(NSPredicate)使用
最全的常用正則表達(dá)式大全
正則表達(dá)式中各種字符的含義

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 有時(shí)我們需要在一大段長(zhǎng)文本中過濾出我們需要的字段,或者檢驗(yàn)該文本是否符合要求(該文本是否是郵箱,鏈接,電話號(hào)...
    進(jìn)無盡閱讀 1,074評(píng)論 0 1
  • 1.在做app注冊(cè)頁(yè)面的時(shí)候,需要判斷手機(jī)號(hào)是否格式正確,是否夠11位。 2.在做意見反饋的時(shí)候,需要判斷郵箱格式...
    Wang99閱讀 406評(píng)論 0 2
  • 前言 開發(fā)中經(jīng)常會(huì)用到正則表達(dá)式來匹配或者過濾目標(biāo)字符串,從而提高自己的開發(fā)效率。本文主要通過介紹正則表達(dá)式,讓你...
    Sunny_Fight閱讀 891評(píng)論 2 1
  • 前言 開發(fā)中經(jīng)常會(huì)用到正則表達(dá)式來匹配或者過濾目標(biāo)字符串,從而提高自己的開發(fā)效率。本文主要通過介紹正則表達(dá)式,讓你...
    橫爬介士閱讀 5,049評(píng)論 0 5
  • 這篇文章其實(shí)是在學(xué)習(xí)正則表達(dá)式時(shí)網(wǎng)上一些資料的整合,所以只能算是一個(gè)總結(jié)性文章,不是自己原創(chuàng),感謝各位的分享。參考...
    coder_zhengyi閱讀 3,062評(píng)論 2 6

友情鏈接更多精彩內(nèi)容