一般來說我們在ios中使用Regex一共有這幾個步驟1、建立一個Regex對象來定義規則 2、利用Regex對象來測試相應的字串。
我們之前匹配字串可能是這麼匹配的,通過for迴圈取出字串,然後再進行一一匹配
NSString * str = @"nsjkan1234980"; BOOL flag = YES; for(int i=0;i<str.length;i++) { unichar c = [str characterAtIndex:i]; if(!(c>='0'&&c<='9')) { flag=NO; break; } } if(flag) { NSLog(@"字串全是數字"); } else { NSLog(@"字串包含了非數字"); }
在Xcode中我們可以這樣使用NSRegularExpression * regex = [[NSRegularExpression alloc]initWithPattern:pattern options:0 error:nil];其中的
options表示的是NSRegularExpressionOptions,這是個枚舉,有以下這麼幾個值 NSRegularExpressionCaseInsensitive = 1 << 0, //不區分字母大小寫模式
NSRegularExpressionAllowCommentsAndWhitespace = 1 << 1, //忽略掉Regex中的空格和#號之後的字元
NSRegularExpressionIgnoreMetacharacters = 1 << 2, //將Regex整體作為字串處理
NSRegularExpressionDotMatchesLineSeparators = 1 << 3, //允許.匹配任何字元,包括分行符號
NSRegularExpressionAnchorsMatchLines = 1 << 4, //允許^和$符號匹配行的開頭和結尾
NSRegularExpressionUseUnixLineSeparators = 1 << 5, //設定\n為唯一的行分隔字元,否則所有的都有效。
NSRegularExpressionUseUnicodeWordBoundaries = 1 << 6 //使用Unicode TR#29標準作為詞的邊界,否則所有傳統Regex的詞邊界都有效
比如說我們可以這麼做,下面是去匹配str字串中的數位個數,其中的pattern就是一個規則,[0-9]就是去尋找有沒有數字,當然前面的那個寫法和[0123456789]這種寫法是一樣的,因為[ ]代表的就是去尋找這個括弧裡面的字元
NSString * str = @"AAABBB"; NSString * pattern = @"[0-9]"; NSRegularExpression * regex = [[NSRegularExpression alloc]initWithPattern:pattern options:0 error:nil]; NSArray * results = [regex matchesInString:str options:0 range:NSMakeRange(0, str.length)]; NSLog(@"%d",results.count);
如果是普通的字串比如說,下面是AB就是去匹配這個字串中有沒有AB字元。
NSString * pattern = @"AB";
下面這個是去找字串中所有小寫字母的個數
NSString * pattern = @"[a-z]";
如果想去找小寫字母和大寫字母都可以有的話,就用下面的。
NSString * pattern = @"[a-zA-Z]";NSString * pattern = @"[a-z|A-Z]";
如果想去找兩個連在一起的數位話,可以用下面的方法
NSString * pattern = @"[0-9][0-9]";
當然我們還可以這麼寫,數字可以用\d來代替的,當然這裡因為\是逸出字元,所以我們還需要再加一個\進行轉換為普通的\
NSString * pattern = @"\\d\\d";
當然想找兩個數字組成的字串,我們還可以這麼做
NSString * pattern = @"\\d{2}";
如果是下面這個就是去找兩個數字後面還帶有兩個A的子串
NSString * pattern = @"\\d{2}A{2}";
這個是表示數字個數是2-4個的,這裡需要注意的是,如果我們字串是7789,匹配出來的是1個不是2個,因為它是能匹配多少就匹配多少個的。
NSString * pattern = @"\\d{2-4}";
下面這個是匹配字串中包含數位個數為0個或者一個,下面這個匹配把空串也包含進去了
NSString * pattern = @"\\d?";
下面這個帶+號的就表示匹配至少包含一個數位字串,這裡有兩個,一個是11212,一個是123
NSString * str = @"a11212abc123";NSString * pattern = @"\\d+";
下面這個表示的是以數字開頭的字串
NSString * pattern = @"^\\d";
下面這個是是否以兩個數字開頭
NSString * pattern = @"^\\d{2}";
下面這個是有任意個1的字串,*表示任意個
NSString * pattern = @"1*";
下面這個判斷是否以數字開頭,是否以數字結尾 . 表示的是任意的字元分行符號除外 ^表示的是以什麼開頭,$表示的是以什麼結尾
NSString * pattern = @"^\\.*\\d$";
判斷是否是純數字,並且開頭不是0,數字是6-11位
NSString * str = @"1121212312123";NSString * pattern = @"^[1-9]\\{5,11}$";
“+”可以用{1,}表示,“?”可以用{0,1}表示,其實也就是說如果是n+表示的就是要至少包含一個n字元,如果是*就表示包含0個或多個的字元n,如果是n?
就表示的是匹配包含0個或者1個n的字串。| 表示的就是或的意思。 Regex可以去判斷字串是否符合某個特定的規則
可以去截取字串中符合某個特定規則的內容,在這裡補充下()的作用就是分組的意思,()內的內容表示的是一個字串,()本身不匹配任何東西,也不限制匹配任何東西,只是把括弧內的內容作為同一個運算式來處理,例如(ab){1,3},就表示ab一起連續出現最少1次,最多3次。如果沒有括弧的話,ab{1,3},就表示a,之後緊跟的b出現最少1次,最多3次。