使用NSRegularExpression解析字符串

时间:2014-05-13 23:46:18

标签: objective-c regex nsregularexpression

我正在尝试使用NSRegularExpression解析一个字符串,以便我可以在预定义的短语之间提取几个字符串:

NSString* theString = @"the date is February 1st 2000 the place is Los Angeles California the people are Peter Smith and Jon Muir";
NSString *pattern = @"(?:the date is )(.*?)(?: the place is )(.*?)(?: the people are )(.*?)";

NSError *error = nil;

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error];


NSArray* matches = [regex matchesInString:theString options:0 range:NSMakeRange(0, theString.length)];

我期待得到3场比赛:

2000年2月1日 加州洛杉矶 Peter Smith和Jon Muir

然而,看起来我没有正确地使用正则表达式组。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

选项1:使用群组匹配

the date is\s*(.*?)\s*the place is\s*(.*?)\s*the people are (.*)

请参阅demo(确保查看右下方窗格中的论坛

当然可以进一步调整。 :)

这个想法是括号将你想要的文本捕获到第1组,第2组和第3组。

This question提供了在Objective C中检索组匹配的语法。

选项2:直接匹配,使用外观

有点笨拙:

(?<=the date is ).*?(?=\s*the place is)|(?<=the place is ).*?(?=\s*the people are)|(?<=the people are ).*

请参阅demo