正则表达式使用步骤:
1. 创建正则表达式对象, 设置约束条件;
1 NSString *pattern = @"\\d{1,3}"; 2 NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern options:0 error:nil];
2. 测试字符串
1 // 2. 测试字符串 2 NSArray *results = [regex matchesInString:username options:0 range:NSMakeRange(0, username.length)]; 3 NSLog(@"%zd", results.count);
3. 特殊符号详解:
- [0-9a-zA-Z]{2,6}?+*
"[]"代表一个范围, 0-9之间或者a-z之间或者A-Z之间的字符;
"{}"代表连续字符的个数范围, 连续2 - 6个字母或者数字;
"\\d"相当于[0-9];
"?"代表 0个或者1个;
"+"代表 至少1个;
"*"代表任意多个;
- @"^\\d[0-9a-zA-Z]*\\d$" 相当于 @"^\\d.*\\d$"
^ : 以数字开头;
$ : 以数字结尾
. : 除换行符以外的任意字符;
4. 实际应用
1 NSString *text = @"[哈哈]// http://www.baidu.com 192.168.1.1; @浪小花 #解放军# WWW.baidu.com, [ni]百度"; 2 /** 3 * 使用正则表达式的步骤 4 1. 创建一个正则表达式对象, 定义规则 5 6 2. 利用正则表达式对象 来测试 相应的字符串 7 */ 8 9 // 1. 创建正则表达式 10 // 规则: [0-9], 查找0-9之间的数字; 相当于 \d (注意\转义字符) 11 // [a-z]{3,6}: 查找 连续3个到6个 的小写字母个数; 12 // 13 NSString *pattern = @"^\\d[0-9a-zA-Z]*\\d$"; 14 // 1.1 QQ 15 pattern = @"^[1-9]\\d{4,10}$"; 16 17 // 1.2 phoneNum 18 pattern = @"^1[3578]\\d{9}$"; 19 20 // 1.3 ip 21 pattern = @"\\d+\\.\\d+\\.\\d+\\.\\d+"; 22 23 // 1.4 判断汉字[] 24 pattern = @"\\[[a-zA-Z\\u4e00-\\u9fa5]+\\]"; 25 26 // 1.5 @ 27 pattern = @"@[0-9a-zA-Z\\u4e00-\\u9fa5]+"; 28 29 // 1.6 # 30 pattern = @"\\#[a-zA-Z\\u4e00-\\u9fa5]+\\#"; 31 32 // 1.7 链接 url 33 pattern = @"\\b(([\\w-]+://?|www[.])[^\\s()<>]+(?:\\([\\w\\d]+\\)|([^[:punct:]\\s]|/)))"; 34 35 pattern = @"\\[[a-zA-Z\\u4e00-\\u9fa5]+\\]|@[0-9a-zA-Z\\u4e00-\\u9fa5]+|\\#[a-zA-Z\\u4e00-\\u9fa5]+\\#|\\b(([\\w-]+://?|www[.])[^\\s()<>]+(?:\\([\\w\\d]+\\)|([^[:punct:]\\s]|/)))"; 36 37 NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern options:0 error:nil]; 38 // ? + * 39 // ?: 0个或者1个 40 // +: 至少1个 41 // *: 0个或者多个(任意) 42 // ^: 开头 43 // @"^\\d[0-9a-zA-Z]*\\d$" 以数字开头, 以数字结尾, 中间是任意多个数字或者字母; 44 45 // 2. 测试字符串 46 NSArray *results = [regex matchesInString:text options:0 range:NSMakeRange(0, text.length)]; 47 for (NSTextCheckingResult *result in results) { 48 NSLog(@"%@ %@", NSStringFromRange(result.range), [text substringWithRange:result.range]); 49 }
5. 常用的正则表达式
"^\d+$" //非负整数(正整数 + 0)
"^[0-9]*[1-9][0-9]*$" //正整数
"^((-\d+)|(0+))$" //非正整数(负整数 + 0)
"^-[0-9]*[1-9][0-9]*$" //负整数
"^-?\d+$" //整数
"^\d+(\.\d+)?$" //非负浮点数(正浮点数 + 0)
"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$" //正浮点数
"^((-\d+(\.\d+)?)|(0+(\.0+)?))$" //非正浮点数(负浮点数 + 0)
"^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$" //负浮点数
"^(-?\d+)(\.\d+)?$" //浮点数
"^[A-Za-z]+$" //由26个英文字母组成的字符串
"^[A-Z]+$" //由26个英文字母的大写组成的字符串
"^[a-z]+$" //由26个英文字母的小写组成的字符串
"^[A-Za-z0-9]+$" //由数字和26个英文字母组成的字符串
"^\w+$" //由数字、26个英文字母或者下划线组成的字符串
"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$" //email地址
"^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$" //url
/^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/ // 年-月-日
/^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/ // 月/日/年
"^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$" //Emil
"(d+-)?(d{4}-?d{7}|d{3}-?d{8}|^d{7,8})(-d+)?" //电话号码
"^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$" //IP地址
^([0-9A-F]{2})(-[0-9A-F]{2}){5}$ //MAC地址的正则表达式
^[-+]?\d+(\.\d+)?$ //值类型正则表达式