xianfengmc 2013-08-27
在ios中主要使用的是NSRegularExpression类、NSTextCheckingResult,
具体代码如下:
NSError *error = NULL; NSString *patternIFrame; NSRegularExpression *regex; int offset = 0; //parse <iframe> patternIFrame = @"\<iframe.*?\<\/iframe\>"; // 配置regex对象 regex = [NSRegularExpression regularExpressionWithPattern:patternIFrame options:NSRegularExpressionCaseInsensitive error:&error]; // 这里是用来从字符串中查询符合规则的字符串,然后返回结果 NSArray *matchResult = [regex matchesInString:text options:NSMatchingReportCompletion range:NSMakeRange(0, text.length)]; for(NSTextCheckingResult *result in matchResult){ @autoreleasepool { // NSLLog(@"%@", result); if(result.range.location-offset > 0){ NSString *str = [text substringWithRange:NSMakeRange(offset, result.range.location-offset)]; NSLog("%@", str); } offset = result.range.location + result.range.length; } }
使用正则表达式可以很方便的操作一个字符串,根据一定的规则可以用来查找、替换。
在使用过程中,写pattern是最困难的一部分,ios中的pattern跟其他的规则又不一样的地方,具体规则参考:https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSRegularExpression_Class/Reference/Reference.html
常用例子:
// 用来判断是否是来自主站的图片
NSString *imgPattern = @"^http://img1\.guokr\.com/thumbnail/[\\w-]{56}_(\\d*)x(\\d*)?\.(jpg|gif|png)";
// 截取iframe标签
patternIFrame = @"\<iframe.*?\<\/iframe\>";
// 从img标签中截取图片地址
patternIFrame = @"src\=(.*?\.\")"