iPhone应用中正则表达式OgreKit使用方法是本文要介绍的内容,主要是来了解OgreKit使用方法,正则表达式是我非常常用的编程工具, 以前不管是在Ruby还是C#中使用率都非常高. 现在开始学习Cocoa之后就一直想知道如何使用正则表达式, 在Cocoa自带的库里面找了很久居然发现没有相应的支持库(BS一下, 这种常用的东西居然没有, 也不知道苹果是怎么想的….).
上网找了不少各式各样的库, 用下来要么体积太大, 要么结构设计的不舒服, 最后把目标锁定在了 OgreKit 上。
是的, 这是一个日本程序员写的东西(无差别仇日的人可以走开了), 最让我头疼的一点就是没有英文文档…. 就连代码里面的注释都是日文的, 还好方法命名非常合理, 靠猜基本都能猜对.
下面介绍一下主要的类:
- OGRegularExpression (正则表达式功能实现)
- OGRegularExpressionEnumerator (匹配结果集的枚举器)
- OGRegularExpressionMatch (匹配结果)
- OGReplaceExpression (替换功能实现)
- OGRegularExpressionFormatter (正则表达式格式化)
先介绍一下 OGRegularExpression.
通过查看它的源文件可以看到参数最多的一个静态构造函数的签名如下
- + (id)regularExpressionWithString:(NSString*)expressionString
- options:(unsigned)options
- syntax:(OgreSyntax)syntax
- escapeCharacter:(NSString*)character;
参数 options 可以接受以下值的组合:
- OgreNoneOption 没有选项
- OgreSingleLineOption 只匹配单行
- OgreMultilineOption ‘.’ 将匹配折行
- OgreIgnoreCaseOption 忽略大小写
- OgreExtendOption 使用扩展匹配模式
- OgreFindLongestOption 使用最大匹配模式
- OgreFindNotEmptyOption 忽略空匹配
- OgreNegateSingleLineOption
- OgreDontCaptureGroupOption 只匹配有名称的组
- OgreCaptureGroupOption 匹配有名称或者无名称的组
- OgreDelimitByWhitespaceOption
参数 syntax 可以接受以下值的组合:
- OgrePOSIXBasicSyntax POSIX Basic RE
- OgrePOSIXExtendedSyntax POSIX Extended RE
- OgreEmacsSyntax Emacs
- OgreGrepSyntax grep
- OgreGNURegexSyntax GNU regex
- OgreJavaSyntax Java (Sun java.util.regex)
- OgrePerlSyntax Perl
- OgreRubySyntax Ruby (default)
- OgreSimpleMatchingSyntax Simple Matching
- escapeCharacter:
- OgreBackslashCharacter @”\\” Backslash (default)
- OgreGUIYenCharacter [NSString stringWithUTF8String:"\xc2\xa5"] Yen Mark
可以看出, 这个库基本上已经封装了所有正则表达式的功能, 而且还兼容多种语法, 很强!
由于很多第三方的库都没有什么文档(Mac下面很少有文档齐全的第三方库), 所以自己查看源文件来了解用法基本上已经是必要的技能了.
下面就来看看如何使用这套库.
1、最简单的使用范例.
- // 构造正则表达式
- OGRegularExpression *regex = [OGRegularExpression regularExpressionWithString:@"a[^a]*a"];
- // 构造匹配结果枚举器
- NSEnumerator *enumerator = [regex matchEnumeratorInString:@"alphabetagammadelta"];
- OGRegularExpressionMatch *match; // 定义匹配结果
- while ((match = [enumerator nextObject]) != nil) { // 顺序获得匹配结果字符串
- NSLog(@"%@", [match matchedString]);
- }
- // 匹配结果:
- // alpha
- // aga
- // adelta
2、替换功能使用范例.
- - (void)replaceTest
- {
- OGRegularExpression *celciusRegex;
- celciusRegex = [OGRegularExpression regularExpressionWithString:@"([+-]?\\d+(?:\\.\\d+)?)C\\b"];
- NSString *targetString = @"36.5C, 3.8C, -195.8C";
- NSLog(@"%@", [celciusRegex replaceAllMatchesInString:targetString
- delegate:self
- replaceSelector:@selector(fahrenheitFromCelsius:contextInfo:)
- contextInfo:nil]);
- // 处理结果: 97.7F, 38.8F, -320.4F
- }
- // 摄氏度转换到华氏温度.
- - (NSString*)fahrenheitFromCelsius:(OGRegularExpressionMatch*)aMatch contextInfo:(id)contextInfo
- {
- double celcius = [[aMatch substringAtIndex:1] doubleValue];
- double fahrenheit = celcius * 9.0 / 5.0 + 32.0;
- return [NSString stringWithFormat:@"%.1fF", fahrenheit]; // 返回替换结果.
- }
3、带名称匹配组使用范例.
- OGRegularExpression *regex = [OGRegularExpression regularExpressionWithString:@"<img src=\"(?<imageURL>.+)\".+>"
- options:OgreCaptureGroupOption
- syntax:OgreRubySyntax
- escapeCharacter:OgreBackslashCharacter];
- NSArray *matches = [regex allMatchesInString:@"<img src=\"http://test.com/hello.jpg\">"];
- if (matches != nil && ([matches count] == 1))
- {
- OGRegularExpressionMatch *match = [matches objectAtIndex: 0];
- NSString *result = [match substringNamed:@"ImageURL"];
- // 结果: ttp://test.com/hello.jpg
- }
小结:详解iPhone应用中正则表达式OgreKit使用方法的内容介绍完了,希望通过本文的学习能对你有所帮助!