iOS中正則的使用方法

一、基本語法

8043006-7bf983cfe962c3c0.png

二、與js的正則對比

  • 多了 \A 字符串開頭, \Z 字符串結(jié)尾,
    • 和^$的區(qū)別就是,^$有兩義性,在多行模式下會匹配行頭尾
    • 而\A\Z只匹配整個字符串的頭尾,不管何種模式
  • 多了命名分組 (?P<id>), 與分組引用 (?P=name)
  • 多了向左預(yù)匹配 (?<=) 與 (?<!)
  • 多了條件分情況匹配 (?(No/name)yes-pattern|no-pattern), 根據(jù)前面某個索引或者具名分組是否匹配到來決定接下來啟動哪一個匹配項
    • 必須先有前面分組,后面判定組才能引用
    • 引用可以使用索引,也可以使用具名

三、注意事項

  1. “.”字符集不包含換行,某些場景必須使用 [\s\S] 這樣的全集代替
  2. 在iOS中,正則以字符串的形式存儲,轉(zhuǎn)義符必須為雙斜扛
  3. 在線測試環(huán)境,regexp

四、iOS中的使用方式

1、使用字符串的子串查找方法


        NSString *re =  @"\\d+";
        NSString *testStr = @"my number is 13662680007";
        
        NSRange range = [testStr rangeOfString:re options:NSRegularExpressionSearch];
        
        if(range.location != NSNotFound){
            NSString *ret = [testStr substringWithRange:range];
            NSLog(@"%@", ret);
            
        }else{
            NSLog(@"not find");
        }

2、使用謂詞模糊查詢方法

+ (BOOL)checkTelNumber:(NSString *) telNumber

{

    NSString *pattern = @"^1+[3578]+\\d{9}";

    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];

    BOOL isMatch = [pred evaluateWithObject:telNumber];

    if (telNumber.length != 11) {

        return NO;

    }

    return isMatch;

}

3、使用正則表達(dá)式對象匹配方法

// 手機號碼匹配
NSString *pattern = @"1[3578]\\d{9}$";

NSError *error = nil;
/*
typedef NS_OPTIONS(NSUInteger, NSRegularExpressionOptions) {
NSRegularExpressionCaseInsensitive = 1 << 0, //不區(qū)分字母大小寫的模式
NSRegularExpressionAllowCommentsAndWhitespace = 1 << 1, //忽略掉正則表達(dá)式中的空格和#號之后的字符
NSRegularExpressionIgnoreMetacharacters = 1 << 2, //將正則表達(dá)式整體作為字符串處理
NSRegularExpressionDotMatchesLineSeparators = 1 << 3, //允許.匹配任何字符,包括換行符
NSRegularExpressionAnchorsMatchLines = 1 << 4, //允許^和$符號匹配行的開頭和結(jié)尾
NSRegularExpressionUseUnixLineSeparators = 1 << 5, //設(shè)置\n為唯一的行分隔符,否則所有的都有效。
NSRegularExpressionUseUnicodeWordBoundaries = 1 << 6 //使用Unicode TR#29標(biāo)準(zhǔn)作為詞的邊界,否則所有傳統(tǒng)正則表達(dá)式的詞邊界都有效
};
*/
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error];

NSArray<NSTextCheckingResult *> *result = [regex matchesInString:str options:0 range:NSMakeRange(0, str.length)];
  if (result) {
    for (int i = 0; i<result.count; i++) {
        NSTextCheckingResult *res = result[i];
        NSLog(@"str == %@", [str substringWithRange:res.range]);
     }
  }else{
      NSLog(@"error == %@",error.description);
  }
}

四、常用正則表達(dá)式

(1)驗證電話號碼:(”^(\d{3,4}-)\d{7,8}$”)

(2)驗證Email地址:(“^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*$”);

(3)整數(shù)或者小數(shù):^[0-9]+([.]{0,1}[0-9]+){0,1}$

(4)只能輸入數(shù)字:”^[0-9]*$”。

(5)只能輸入由26個英文字母組成的字符串:”^[A-Za-z]+$”。

(6)驗證是否含有%&’,;=?$\”等字符:”[%&',;=?$\x22]+”。

(7)只能輸入漢字:”^[\u4e00-\u9fa5]{0,}$”。

(8).驗證一年的12個月:”^(0?[1-9]|1[0-2])$”正確格式為:”01″~”09″和”10″~”12″。

(9)驗證一個月的31天:”^((0?[1-9])|((1|2)[0-9])|30|31)$”正確格式為;”01″~”09″、”10″~”29″和“30”~“31”。

(10)獲取日期正則表達(dá)式:\d{4}[年|-|.]\d{\1-\12}[月|-|.]\d{\1-\31}日? 注:可用來匹配大多數(shù)年月日信息。

(11)匹配空白行的正則表達(dá)式:\n\s*\r 注:可以用來刪除空白行

(12)匹配帳號是否合法(字母開頭,允許5-16字節(jié),允許字母數(shù)字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 注:表單驗證時很實用

(13)匹配騰訊QQ號:[1-9][0-9]{4,} 注:騰訊QQ號從10 000 開始

(14)匹配中國郵政編碼:[1-9]\d{5}(?!\d) 注:中國郵政編碼為6位數(shù)字

(15)匹配ip地址:((2[0-4]\d|25[0-5]|[01]?\d\d?).){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)。

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

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

  • Python中的正則表達(dá)式(re) import rere.match #從開始位置開始匹配,如果開頭沒有則無re...
    BigJeffWang閱讀 7,593評論 0 99
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,564評論 19 139
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,714評論 0 5
  • 一、正則表達(dá)式的用途(搜索和替換) 1.1.正則表達(dá)式(regular expression,簡稱regex)是一...
    IIronMan閱讀 10,271評論 0 14
  • 在@Value注解中為String類型的字段設(shè)置null值 http://www.cnblogs.com/larr...
    WY_250e閱讀 942評論 0 0

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