OC-正規表現
4935 ワード
1.一般的なやり方
2.正規表現
1).正規表現を使用する手順:1>.正規表現オブジェクトを作成する:定義ルール2>.正規表現オブジェクトを使用して対応する文字列をテストします(1つのオブジェクトオブジェクトに1つの文字列、出力結果は配列)
2).スタイルルール
NSString *pattern = @"ab7";[]:内部の文字を見つけてください.
|:orまたは
\:エスケープ文字、特殊文字を区切ることができます.たとえば[,\を付けないと[]内部の内容が見つかります.
.:省略記号
eg:\[.+\]表示[...................]括弧および括弧内の内容NSString*pattern=@"[0123456789]; NSString *pattern = @"[0-9]"; NSString *pattern = @"[a-zA-Z0-9]";a~zとA~zと0~9にスペースNSString*pattern=@「[0-9][0-9]」; NSString *pattern = @"\\d\\d\\d";\dは数字NSString*pattern=@"\d{2,4}";{2,4}2~4ビット
NSString *pattern = @"\\d{2,4}|\\d\\d\\d";
? + * ? : 0個または1個+:少なくとも1個//常用*:0個または複数
^トップ$は最下位を表します
3.シーンとRegexKitLiteの適用
//
void test()
{
NSString *username = @"5347858h7";
BOOL flag = YES;
for (int i = 0; i<username.length; i++) {
unichar c = [username characterAtIndex:i];
if (!(c >= '0' && c <= '9')) {
flag = NO;
break;
}
}
if (flag) {
NSLog(@" ");
} else {
NSLog(@" ");
}
}
2.正規表現
1).正規表現を使用する手順:1>.正規表現オブジェクトを作成する:定義ルール2>.正規表現オブジェクトを使用して対応する文字列をテストします(1つのオブジェクトオブジェクトに1つの文字列、出力結果は配列)
2).スタイルルール
NSString *pattern = @"ab7";[]:内部の文字を見つけてください.
|:orまたは
\:エスケープ文字、特殊文字を区切ることができます.たとえば[,\を付けないと[]内部の内容が見つかります.
.:省略記号
eg:\[.+\]表示[...................]括弧および括弧内の内容NSString*pattern=@"[0123456789]; NSString *pattern = @"[0-9]"; NSString *pattern = @"[a-zA-Z0-9]";a~zとA~zと0~9にスペースNSString*pattern=@「[0-9][0-9]」; NSString *pattern = @"\\d\\d\\d";\dは数字NSString*pattern=@"\d{2,4}";{2,4}2~4ビット
NSString *pattern = @"\\d{2,4}|\\d\\d\\d";
? + * ? : 0個または1個+:少なくとも1個//常用*:0個または複数
^トップ$は最下位を表します
NSString *username = @"6gjkhdjkhgkjh7";
// NSString *pattern = @"^\\d{3}"; // 3
// NSString *pattern = @"\\d{3}$"; // 3
// 1.
NSString *pattern = @"^\\d.*\\d$"; // . *
NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern options:0 error:nil];
// 2.
NSArray *results = [regex matchesInString:username options:0 range:NSMakeRange(0, username.length)];
NSLog(@"%zd", results.count);
3.シーンとRegexKitLiteの適用
1.
//
NSString *str = @"# #[ ] http://foo.com/blah_blah # #//http://foo.com/blah_blah @Ring : # # [test] # # [ ]//@ : …… //@toto97:@ # # http://foo.com/blah_blah";
//
NSString *emotionPattern = @"\\[[0-9a-zA-Z\\u4e00-\\u9fa5]+\\]";
// @
NSString *atPattern = @"@[0-9a-zA-Z\\u4e00-\\u9fa5]+";
// # #
NSString *topicPattern = @"#[0-9a-zA-Z\\u4e00-\\u9fa5]+#";
// url
NSString *urlPattern = @"\\b(([\\w-]+://?|www[.])[^\\s()<>]+(?:\\([\\w\\d]+\\)|([^[:punct:]\\s]|/)))";
NSString *pattern = [NSString stringWithFormat:@"%@|%@|%@|%@", emotionPattern, atPattern, topicPattern, urlPattern];
// NSArray *cmps = [str componentsMatchedByRegex:pattern];
// :
NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern options:0 error:nil];
// 2.
NSArray *results = [regex matchesInString:str options:0 range:NSMakeRange(0, str.length)];
// 3.
for (NSTextCheckingResult *result in results) {
NSLog(@"%@ %@", NSStringFromRange(result.range), [str substringWithRange:result.range]);
}
//RegexKitLite
1. libicucore
2. arc, Build Phases-->Compile Sources-->RegexKitLite.m--> -fno-objc-arc
// :
[str enumerateStringsMatchedByRegex:pattern usingBlock:^(NSInteger captureCount, NSString *const __unsafe_unretained *capturedStrings, const NSRange *capturedRanges, volatile BOOL *const stop) {
NSLog(@"%@ %@", *capturedStrings, NSStringFromRange(*capturedRanges));
}];
NSLog(@"-------------");
//
[str enumerateStringsSeparatedByRegex:pattern usingBlock:^(NSInteger captureCount, NSString *const __unsafe_unretained *capturedStrings, const NSRange *capturedRanges, volatile BOOL *const stop) {
NSLog(@"%@ %@", *capturedStrings, NSStringFromRange(*capturedRanges));
}];
}
2.
- (BOOL)match:(NSString *)pattern
{
// 1.
NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern options:0 error:nil];
// 2.
NSArray *results = [regex matchesInString:self options:0 range:NSMakeRange(0, self.length)];
return results.count > 0;
}
// QQ
- (BOOL)isQQ
{
// 1. 0
// 2.
// 3.5-11
return [self match:@"^[1-9]\\d{4,10}$"];
}
//
- (BOOL)isPhoneNumber
{
// 1.
// 2.11
// 3. 13\15\18\17
return [self match:@"^1[3578]\\d{9}$"];
// JavaScript :\^1[3578]\\d{9}$\
}
// ip
- (BOOL)isIPAddress
{
// 1-3 : 0-255
// 1-3 .1-3 .1-3 .1-3
return [self match:@"^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$"];
}