FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Objective-Cで正規表現 [Xcode]

Objective-Cで正規表現を使って検索・置換するのに手間取りましたので、メモです。

Objective-Cでは他の言語のように1行で正規表現を書けるのではなく、
NSRegularExpressionと NSTextCheckingResultと言うのを使わなければなりません。

検索


文字列に特定のパターンがあるかどうかを検索します。
パターンがマッチしたら、match.numberOfRangesが1以上になります。

NSString *str = @"ABCABCD";
NSString *pattern = @"[BCD]";

// 正規表現検索を実行
NSRegularExpression *regex =
[NSRegularExpression regularExpressionWithPattern:pattern options:0 error:nil];
NSTextCheckingResult *match =
[regex firstMatchInString:str options:0 range:NSMakeRange(0, str.length)];

// マッチした場合
if(match.numberOfRanges) {
NSLog(@"Match!!");
}



抜出し


正規表現の()を使い、マッチした内容を抜出します。
抜出す箇所は、matchの rangeAtIndex:で指定します。
なお、正規表現のエスケープシーケンスにはバックスラッシュ2個 "\\" が必要なようです。

NSString *str = @"1234-ABCD-2345";
NSString *pattern = @"-([A-D]*)-(\\d+)";

// 正規表現検索を実行
NSRegularExpression *regex =
[NSRegularExpression regularExpressionWithPattern:pattern options:0 error:nil];
NSTextCheckingResult *match =
[regex firstMatchInString:str options:0 range:NSMakeRange(0, str.length)];

// マッチした場合
if(match.numberOfRanges) {
NSString *resultAll = [str substringWithRange:[match rangeAtIndex:0]];
NSLog(@"%@", resultAll); // マッチ全体  @"-ABCD-2345"
NSString *result1 = [str substringWithRange:[match rangeAtIndex:1]];
NSLog(@"%@", result1); // 最初の括弧内 @"ABCD"
NSString *result2 = [str substringWithRange:[match rangeAtIndex:2]];
NSLog(@"%@", result2); // 次の括弧内  @"2345"
}


置換


置換は fromと toの2つのパターン文字列を用意し、
NSRegularExpressionの後に stringByReplacingMatchesInStringを実行します。
()を使えば、to内でそれを$1,$2として使用できます。

NSString *str = @"1234-ABCD-2345";
NSString *from = @"(\\d+)-(\\w+)-";
NSString *to = @"$2-$1-";

// 正規表現置換を実行
NSRegularExpression *regex =
[NSRegularExpression regularExpressionWithPattern:from options:0 error:nil];
NSString *result =
[regex stringByReplacingMatchesInString:str options:0
range:NSMakeRange(0,str.length) withTemplate:to];
NSLog(@"%@", result); // 1234とABCDを入換え @"ABCD-1234-2345"
関連記事

コメントの投稿

非公開コメント

Appご紹介
K app designのAppをご紹介します

ねこわけ

画面中央の猫を次々に仕分けるゲームです。

あまり計算機

あまりを計算できる割算専用の計算機です。

6オクターブ ピアノ

6オクターブ鍵盤のピアノアプリです。iPad専用。

Dynamic Drum

様々な演奏法が楽しめるドラム演奏アプリです。

クイズボタン

早押しクイズのサポートをするアプリです。

クイズボタン Pro

クイズボタンに点数表示機能が付きました。

クイズボタン HD

クイズボタンのiPad専用版。回答者ボタンが8つに増量。

ベロシティ ピアノ

タップの強弱で音量が変わるピアノアプリです。

TIMERx4

4つのキッチンタイマーを同時に動作できるアプリです。

アナデジClock

アナログとデジタルが融合した時計です。
検索フォーム
最新記事
最新コメント
カテゴリ
人気ページ
月別アーカイブ
QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。