`
lovebirdegg
  • 浏览: 175446 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

在iphone中使用正则表达式 — OgreKit 详解

阅读更多
来源: http://blog.codingmylife.com/?p=36

正则表达式是我非常常用的编程工具, 以前不管是在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开发中的正则表达式

    因此,你可以在Swift项目中使用RegexKitLite。 Q: RegexKitLite的性能如何? A: RegexKitLite经过精心优化,能够在多种设备上实现高性能的表现,尤其是在处理大量数据时表现优异。 #### 十、结语 通过本文档的学习...

    iOS中使用正则表达式NSRegularExpression 来验证textfiled输入的内容

    正则表达式(regular expression),在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的...

    iOS原生正则表达式以及NSArray快捷过滤

    NSPredicate应用,包括以下几个部分: 1、字符串,正则表达式的匹配; 2、字符串数组NSArray和NSMutableArray的快捷过滤方式; 3、自定义对象数组NSArray和NSMutableArray的快捷过滤方式;

    JSP判断移动设备的正则

    总之,这段代码展示了如何在JSP中使用正则表达式检测用户设备类型,以便根据设备特性提供不同的页面体验。这种方法对于响应式设计或者为不同设备提供定制内容的应用非常有用。同时,了解和掌握JSP、正则表达式以及...

    RegexKitLite-4.0.tar

    使用RegexKitLite使iphone也可以使用正则表达式

    iphone小结

    在Objective-C中,我们可以使用`NSRegularExpression`类来处理正则表达式。注意,使用时字符串必须是可变的,否则可能导致错误。在示例中未提供具体的正则表达式,但通常会用它们来验证输入、查找或替换文本。 4. *...

    仿Iphone中搜索结果的布局详解

    在iOS系统中,iPhone的搜索结果布局设计是一种直观且用户友好的方式,它允许用户快速查找并访问设备上的信息。本文将深入解析如何在Android平台上实现类似iPhone的搜索结果布局,以提供类似的用户体验。 首先,我们...

    Objective PCRE (ObjPCRE)-开源

    4. **跨平台**:尽管主要针对Cocoa和iPhone应用,但ObjPCRE由于其语言特性的灵活性,可以在支持Objective-C的任何平台上运行,如Mac OS X、iOS以及通过桥接头文件在其他语言中使用。 5. **性能优化**:尽管...

    js判断浏览器终端

    - **苹果 iPhone**:使用正则表达式 `/iphone/i` 来匹配 “iPhone” 关键字。 - **iPad**:使用正则表达式 `/ipad/i` 来匹配 “iPad” 关键字。 示例代码如下: ```javascript if (window.location.host == ...

    IOS应用源码——一些iPhone开源项目代码Unicode.zip

    - 注意在正则表达式中使用Unicode可能需要开启特定选项,如`NSRegularExpressionUseUnicodePropertySyntax`。 6. **Unicode与字体** - iOS系统自带多种字体,支持多种Unicode字符。开发者也可以引入自定义字体来...

    iphone 的导航条使用详解

    iphone 的导航条使用详解 iphone 的导航条使用详解 iphone 的导航条使用详解

    一個基於正則測試 VOD 可用性的 App,SwiftUI 編寫.zip

    标题中的“一個基於正則測試 VOD 可用性的 App,SwiftUI 編寫.zip”表明这是一个使用SwiftUI框架编写的视频点播(VOD)应用,它通过正则表达式进行可用性测试。这个应用可能包含了验证VOD服务的可用性、播放功能、...

    Iphone_开发常用代码

    在iOS开发中,正则表达式常用于文本匹配、验证等场景。下面是一个简单的正则表达式使用示例: ```objective-c // 假设要验证邮箱地址是否合法 NSError *error = nil; NSRegularExpression *regex = ...

    JavaScript判断浏览器类型及版本

    - 使用正则表达式匹配 `navigator.userAgent` 中的 `"MSIE"` 字符串来获取版本号。 - 示例版本: - `Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)` - `Mozilla/4.0 (compatible; MSIE 7.0; Windows NT ...

    IOS应用源码——一些iPhone开源项目代码Unicode.rar

    8. **正则表达式与Unicode**:在处理文本时,正则表达式也需要考虑Unicode。使用`NSRegularExpression`类时,可以指定是否启用Unicode属性。 9. ** emoji支持**:Unicode包含了大量emoji,iOS设备通常能很好地支持...

    详解IPHONE4S电路

    标题与描述均提到了“详解IPHONE4S电路”,这暗示了内容将深入探讨苹果iPhone 4S手机的电路设计和组件。iPhone 4S作为苹果公司2011年发布的智能手机,其内部电路设计是业界关注的焦点,不仅因为其高性能、高集成度,...

    plist Editor v1.0.2.zip

    ·正则表达式搜索/替换支持。 ·书签。 ·无限撤消支持。 ·PLIST syntex保存到磁盘之前。 · Skinable,易于使用的用户界面。 编辑plist文件,只需运行Windows PLIST编辑器,打开你的XML /二进制格式属性的...

    RegEx Categories(iPhone源代码)

     从iOS 4开始,原生SDK提供了NSRegularExpression用于处理一些跟正则表达式相关的操作,比如字符查找、数字匹配等等。但是NSRegularExpression的用法比较繁冗。RegEx Categories提供了一系列十分简便的方法来进行...

    ios应用源码之一些iphone开源项目代码unicode 2018127

    3. **NSRegularExpression**: 正则表达式在iOS开发中用于文本匹配和查找,它也支持Unicode。了解如何编写正则表达式来处理Unicode字符,可以提高你的文本处理能力。 4. **国际化和本地化**: iOS提供了一系列框架,...

Global site tag (gtag.js) - Google Analytics