document.write('\n'); document.write('\n'); document.write('\n'); document.write('\n'); document.write('
\n'); document.write('
\n'); document.write(' \n'); document.write(' \n'); document.write(' \n'); document.write(' \n'); document.write(' \n'); document.write('
1\n'); document.write('2\n'); document.write('3\n'); document.write('4\n'); document.write('5\n'); document.write('6\n'); document.write('7\n'); document.write('8\n'); document.write('9\n'); document.write('10\n'); document.write('11\n'); document.write('12\n'); document.write('13\n'); document.write('14\n'); document.write('15\n'); document.write('16\n'); document.write('17\n'); document.write('18\n'); document.write('19\n'); document.write('20\n'); document.write('21\n'); document.write('22\n'); document.write('23\n'); document.write('24\n'); document.write('25\n'); document.write('26\n'); document.write('27\n'); document.write('28\n'); document.write('29\n'); document.write('30\n'); document.write('31\n'); document.write('32\n'); document.write('33\n'); document.write('34\n'); document.write('35\n'); document.write('36\n'); document.write('37\n'); document.write('38\n'); document.write('39\n'); document.write('40\n'); document.write('41\n'); document.write('42\n'); document.write('43\n'); document.write('44\n'); document.write('45\n'); document.write('46\n'); document.write('47\n'); document.write('48\n'); document.write('49\n'); document.write('50\n'); document.write('51\n'); document.write('52\n'); document.write('53\n'); document.write('54\n'); document.write('55\n'); document.write('56\n'); document.write('57\n'); document.write('58\n'); document.write('59\n'); document.write('60\n'); document.write('61\n'); document.write('62\n'); document.write('63\n'); document.write('64\n'); document.write('65\n'); document.write('66\n'); document.write('67\n'); document.write('68\n'); document.write('69\n'); document.write('70\n'); document.write('71\n'); document.write('72\n'); document.write('73\n'); document.write('74\n'); document.write('75\n'); document.write('76\n'); document.write('77\n'); document.write('78\n'); document.write('79\n'); document.write('80\n'); document.write('81\n'); document.write('82\n'); document.write('83\n'); document.write('84\n'); document.write('85\n'); document.write('86\n'); document.write('
#import "NSString+Regex.h"\n');
document.write('#include <regex.h>\n');
document.write('\n');
document.write('@implementation NSString (Regex)\n');
document.write('\n');
document.write('static void raise_reg_error_exception(const char* name, int errorcode, regex_t* regex) {\n');
document.write('    NSMutableData*  errorString = [NSMutableData data];\n');
document.write('    \n');
document.write('    [errorString setLength:regerror(errorcode, regex, NULL, 0)];\n');
document.write('\n');
document.write('    size_t errorSize = regerror(errorcode, regex, [errorString mutableBytes], [errorString length]);\n');
document.write('\n');
document.write('    regfree(regex);\n');
document.write('\n');
document.write('    NSCAssert2(errorSize == [errorString length],\n');
document.write('               @"Unexpected size in raise_reg_error_exception: %d, %d",\n');
document.write('               errorSize, [errorString length]);\n');
document.write('\n');
document.write('    [NSException raise: NSInvalidArgumentException\n');
document.write('                format: @"%s: %s", name, [errorString bytes]];\n');
document.write('}\n');
document.write('- (NSArray *) findRegularExpression:(NSString *)re ignoreCase:(BOOL)ignoreCase; {\n');
document.write('    regex_t regex;\n');
document.write('    int regCompFlags = REG_EXTENDED;\n');
document.write('    int regExecFlags = 0;\n');
document.write('    int err = 0;\n');
document.write('\n');
document.write('    //NSLog(@"@\"%@\": findRegularExpression:@\"%@\" ignoreCase:%s", self, re, (ignoreCase ? "YES" : "NO"));\n');
document.write('\n');
document.write('    if (ignoreCase)\n');
document.write('    {\n');
document.write('        regCompFlags |= REG_ICASE;\n');
document.write('    }\n');
document.write('\n');
document.write('    // Compile the regular expression\n');
document.write('    if ((err = regcomp(&regex, [re UTF8String], regCompFlags)) != 0)\n');
document.write('    {\n');
document.write('        // Failed to compile the RE, issue a diagnostic message\n');
document.write('        raise_reg_error_exception("regcomp", err, &regex);\n');
document.write('        return nil;\n');
document.write('    }\n');
document.write('\n');
document.write('    //NSLog(@"match count: %d", 1 + regex.re_nsub);\n');
document.write('\n');
document.write('    NSMutableData*  matchData = [NSMutableData dataWithCapacity: (1 + regex.re_nsub) * sizeof (regmatch_t)];\n');
document.write('    regmatch_t*     matches   = [matchData mutableBytes];\n');
document.write('\n');
document.write('    // Execute the compiled regular expression\n');
document.write('    if ((err = regexec(&regex, [self UTF8String], 1 + regex.re_nsub, matches, regExecFlags)) != 0)\n');
document.write('    {\n');
document.write('        if (err != REG_NOMATCH)\n');
document.write('        {\n');
document.write('            raise_reg_error_exception("regexec", err, &regex);\n');
document.write('        }\n');
document.write('\n');
document.write('        // The "nil" return indicates there was no match.  No need for a diagnostic.\n');
document.write('        regfree(&regex);\n');
document.write('        return nil;\n');
document.write('    }\n');
document.write('\n');
document.write('    // Place the matches in an array and return them\n');
document.write('    NSMutableArray *matchArray = [NSMutableArray arrayWithCapacity: 1 + regex.re_nsub];\n');
document.write('    int m;\n');
document.write('\n');
document.write('    for (m = 0; m <= regex.re_nsub; m++)\n');
document.write('    {\n');
document.write('        if (matches[m].rm_so == -1)\n');
document.write('        {\n');
document.write('            [matchArray addObject: [NSNull null]];\n');
document.write('        }\n');
document.write('        else\n');
document.write('        {\n');
document.write('            NSRange matchRange = NSMakeRange(matches[m].rm_so, (matches[m].rm_eo - matches[m].rm_so));\n');
document.write('            \n');
document.write('            [matchArray addObject:[self substringWithRange:matchRange]];\n');
document.write('        }\n');
document.write('    }\n');
document.write('\n');
document.write('    regfree(&regex);\n');
document.write('\n');
document.write('    return matchArray;\n');
document.write('}\n');
document.write('\n');
document.write('@end\n');
document.write('
\n'); document.write('
\n'); document.write('
\n'); document.write('
\n'); document.write(' via Snippie [4a254dfd]Original\n'); document.write('
\n'); document.write('
\n'); document.write('\n'); document.write('
');