IOS之正则表达式
1、首先是介绍正则的语法
在此网上搜索的一些文章供参考:
http://msdn.microsoft.com/zh-cn/library/ae5bf541(VS.80).aspx
常用到的一些:
2、关于处理微博上类似 @ 或者 # 的特殊转义字符
可以用:AutoHyperlinks
但是有人说,不支持中文,那么,咱们只要改一下正则就可以了
下载文件打开JSTwitterCoreTextView.m
把如下正则:
NSArray *expressions = [[[NSArray alloc] initWithObjects:
@"(@[a-zA-Z0-9_]+)", // screen names
@"(#[a-zA-Z0-9_-]+)", // hash tags
nil] autorelease];
改成:
NSArray *expressions = [[[NSArray alloc] initWithObjects:
@"(@[a-zA-Z0-9_\u4E00-\u9FA5]+)", // screen names
@"(#([a-zA-Z0-9_\u4E00-\u9FA5]*)#)", // hash tags
nil] autorelease];
“@[a-zA-Z0-9_\u4E00-\u9FA5]+” :意思是以@开头的后面可以跟a-z、A-Z、0-9、_(下划线)、\u4E00-\u9FA5(汉字)、+(+是和*类似的元字符,不同的是*匹配重复任意次(可能是0次),而+则匹配重复1次或更多次),可以用这些组成字符串
“#([a-zA-Z0-9_\u4E00-\u9FA5]*)#)” :意思是只能是两个#号之间组成的字符串
+ (NSString *)getDomainOfEmailAddress:(NSString *)email
{
NSString *re = @"(?<=@)((?:[A-Za-z0-9]+(?:[\\-|\\.][A-Za-z0-9]+)*)+\\.[A-Za-z]{2,6})$";
NSRange range = [email rangeOfString:re options:NSRegularExpressionSearch];
if (range.location != NSNotFound) {
return [email substringWithRange:range];
}
else {
return nil;
}
}
+ (BOOL)isEmailAddress:(NSString *)email
{
NSString *re = @"<span style="font-family: Arial, Helvetica, sans-serif;">^([A-Za-z0-9\\.\\-_]{1,})@((?:[A-Za-z0-9]+(?:[\\-|\\.][A-Za-z0-9]+)*)+\\.[A-Za-z]{2,6})$</span><span style="font-family: Arial, Helvetica, sans-serif;">";</span>
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", re];
return [emailTest evaluateWithObject:email];
}
NSString *regex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSPredicate *predicate = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@", regex];
BOOL isValid = [predicate evaluateWithObject:email];
谓词匹配比较灵活,但是需要有谓词的相关知识。