3

给定一个NSString *test = @"...href="/functions?q=KEYWORD\x26amp...";

如何使用 NSRegularExpression 从字符串中提取单词KEYWORD ?
我在 iOS SDK 4.2 上尝试了以下 NSRegularExpression,但它无法找到文本。下面的代码看起来没问题吗?

NSRegularExpression *testRegex = [NSRegularExpression regularExpressionWithPattern:@"(?<=href=\"\\/functions\\?q=).+?(?=\\x26amp])" options:0 error:nil];
NSRange result = [testRegex rangeOfFirstMatchInString:test options:0 range:NSMakeRange(0, [test length])];
4

1 回答 1

10

你的正则表达式中有一个杂散的“]”,就在结束之前,这可能会导致问题。您还需要使用四个斜杠来匹配输入字符串中的斜杠。(将其加倍以在 C 字符串中对其进行转义,然后再次加倍以在正则表达式中对其进行转义)。我建议两件事。首先,在错误参数中传递一些东西,并在调试器中查看它。其次,我不是前瞻/后瞻表达式的忠实粉丝。我认为这种风格更具可读性:

NSString *regexStr = @"href=\"\\/functions\\?=(.+?)\\\\x26amp";
NSError *error;
NSRegularExpression *testRegex = [NSRegularExpression regularExpressionWithPattern:regexStr options:0 error:&error];
if( testRegex == nil ) NSLog( @"Error making regex: %@", error );
NSTextCheckingResult *result = [testRegex firstMatchInString:test options:0 range:NSMakeRange(0, [test length])];
NSRange range = [result rangeAtIndex:1];
于 2011-01-15T19:27:41.530 回答