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(' | \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(®ex, [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, ®ex);\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(®ex, [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, ®ex);\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(®ex);\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(®ex);\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('