【发布时间】:2011-06-12 14:59:09
【问题描述】:
我需要在 iphone 上开始使用正则表达式。
基本上,我在私人 MediaWiki 中有一个日期列表,格式为*185 BC: SOME EVENT HERE*2001: SOME OTHER EVENT MUCH LATER
我现在想将其解析为一个具有 NSDate 属性和 -say- NSString 属性的对象。 到目前为止我有这个:(rawContentString 包含页面的 mediawiki 语法)
NSString* regexString =@"\\*( *[0-9]{1,}.*): (.*)";
NSRegularExpressionOptions options = NSRegularExpressionCaseInsensitive;
NSError* error = NULL;
NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:regexString options:options error:&error];
if (error) {
NSLog(@"%@", [error description]);
}
NSArray* results = [regex matchesInString:rawContentString options:0 range:NSMakeRange(0, [rawContentString length])];
for (NSTextCheckingResult* result in results) {
NSString* resultString = [rawContentString substringWithRange:result.range];
NSLog(@"%@",resultString);
}
不幸的是,我认为正则表达式没有按我希望的方式工作,我不知道如何捕获匹配的日期和文本。 任何帮助都会很棒。 顺便说一句:没有任何机会为 MediaWiki 语法编译正则表达式模式吗?
提前致谢 平子 *
【问题讨论】:
-
如果我是你,我会使用regexkit.sourceforge.net。根据我的经验,它的性能要好得多,而且通常你会得到你需要的东西。
-
您好,感谢您的提示。我调查了一下。但是我的应用程序只能在 4.0+ 上运行,所以我认为使用 IOS 正则表达式功能会更好。不是这样吗?
-
AFAIK 他们使用相同的底层内容,而 regexkit 似乎更好用 - 但我想这真的是个人喜好。但也许其他人对此了解更多。
-
(仅供参考,我是 RegexKitLite 的作者)。
NSRegularExpression和 RegexKitLite 都使用与libicucore完全相同的 ICU 正则表达式引擎。理论上它们应该提供相同的结果,但实际上可能存在一些极其细微的差异(例如,RegexKitLite 必须专门使用公共 API,而NSRegularExpression可以使用私有 API)。正如@LordT 所说,我认为区别在于“个人偏好”。此外,在撰写本文时,RegexKitLite 几乎可以在所有 Mac OS X 和 iOS 版本上运行。 -
感谢您的澄清,约翰
标签: iphone objective-c regex mediawiki