【问题标题】:Text extraction with NSRegularExpression使用 NSRegularExpression 提取文本
【发布时间】:2011-01-15 14:01:43
【问题描述】:

给定一个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])];

【问题讨论】:

    标签: iphone regex ios pattern-matching text-extraction


    【解决方案1】:

    您的正则表达式中有一个杂散的“]”,就在结束之前,这可能会导致问题。您还需要使用四个斜杠来匹配输入字符串中的斜杠。 (将其加倍以在 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];
    

    【讨论】:

    • 流浪的“]”是我发布问题时的拼写错误。解决问题的关键是四个斜线来匹配输入字符串中的一个斜线。这是很多逃避!谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    相关资源
    最近更新 更多