一般来说我们在ios中使用正则表达式一共有这几个步骤1、创建一个正则表达式对象来定义规则 2、利用正则表达式对象来测试相应的字符串。
我们之前匹配字符串可能是这么匹配的,通过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, //忽略掉正则表达式中的空格和#号之后的字符
NSRegularExpressionIgnoreMetacharacters = 1 << 2, //将正则表达式整体作为字符串处理
NSRegularExpressionDotMatchesLineSeparators = 1 << 3, //允许.匹配任何字符,包括换行符
NSRegularExpressionAnchorsMatchLines = 1 << 4, //允许^和$符号匹配行的开头和结尾
NSRegularExpressionUseUnixLineSeparators = 1 << 5, //设置\n为唯一的行分隔符,否则所有的都有效。
NSRegularExpressionUseUnicodeWordBoundaries = 1 << 6 //使用Unicode TR#29标准作为词的边界,否则所有传统正则表达式的词边界都有效
比如说我们可以这么做,下面是去匹配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的字符串。| 表示的就是或的意思。 正则表达式可以去判断字符串是否符合某个特定的规则
可以去截取字符串中符合某个特定规则的内容,在这里补充下()的作用就是分组的意思,()内的内容表示的是一个字符串,()本身不匹配任何东西,也不限制匹配任何东西,只是把括号内的内容作为同一个表达式来处理,例如(ab){1,3},就表示ab一起连续出现最少1次,最多3次。如果没有括号的话,ab{1,3},就表示a,之后紧跟的b出现最少1次,最多3次。