2232


現在APIからデータを取得してiOSアプリ上で表示させるプログラムを書いております。

[code]

    NSString *opentime = self.opentimesArray[number];
    //opentimeにはランチ：11:30～14:30(L.O.14:00)、ディナー：17:00～22:30(L.O.21:00)が入っています。
    NSString *matchedOpentime = [opentime stringByMatching:@"[〜]"];
    NSLog(@"抜き出した営業時間は%@",matchedOpentime);
    
[/code]

以下のような文字列 ランチ：11:30～14:30(L.O.14:00)、ディナー：17:00～22:30(L.O.21:00) から

「11:30～14:30」、「17:00～22:30」

の営業時間に関する部分だけを、抜き出したいのですが、正規表現を利用した経験が無いためどのように書けば良いのか分かりません。

どのように書けば良いでしょうか？

開発言語はObjective-cで正規表現のライブラリはRegexKitLiteもしくはNSRegularExpressionを使用したいと考えております。
また正規表現を使わなくても文字列の一部を抜き出せる方法がもしあれば教えていただけると大変ありがたいです。


CC BY-SA 3.0
2014-12-20T07:30:06.070
2219
2014-12-20T15:49:58.837
2014-12-20T07:40:25.283
33
5346
question
ios objective-c 正規表現
正規表現での文字列の取り出しについて


質問に書いているケースなら`RegexKitLite`を利用した場合

[code]

    NSString *matchedOpentime = [opentime stringByMatching:@"\\d{1,2}:\\d{1,2}～\\d{1,2}:\\d{1,2}"];
    
[/code]

で取得できます。

  * `\\\d`はざっくり言うと数字にマッチします
  * `{1,2}`はその一つ前のパターンが1回以上、2回まで繰り返される部分にマッチします。(`{2}`としないのは「9:30」などへの対応)

しかし、「〜」という文字は`UTF-8`では似た文字が複数あり、実用上困る可能性が出てくるかもしれません。(WAVE DASH問題などと呼ばれています)

また、`RegexKitLite`が対応している正規表現のシンタックスは以下になります。

[ICUSyntax -
RegexKitLite](http://regexkit.sourceforge.net/RegexKitLite/#ICUSyntax)

ただ、そもそも正規表現に慣れ親しんでいないとのことですので、日本語のサイトで基礎知識をつけつつ、以下のようなサイトで正規表現のパターンをあれこれ試してみて、感覚を掴むと良いかもしれません。

<http://www.regexr.com/>


CC BY-SA 3.0
2014-12-20T08:57:20.817
2232
2014-12-20T09:02:43.813
2014-12-20T09:02:43.813
3313
3313
2219
answer


文字列のフォーマットが、それほど多様性が無いのであれば、NSScannerを使う事を視野に入れてはいかがでしょうか。


CC BY-SA 3.0
2014-12-20T15:49:58.837
2275
2014-12-20T15:49:58.837
4956
2219
answer