質問: [opentime stringByMatching:@"[〜]"]; NSLog(@"抜き出した営業時間は%@",matchedOpentime); ``` 以下のような文字列 ランチ: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を使用したいと考えております。 また正規表現を使わなくても文字列の一部を抜き出せる方法がもしあれば教えていただけると大変ありがたいです。
回答: 質問に書いているケースなら`RegexKitLite`を利用した場合 ``` NSString *matchedOpentime = [opentime stringByMatching:@"\\d{1,2}:\\d{1,2}~\\d{1,2}:\\d{1,2}"]; ``` で取得できます。 * `\\d`はざっくり言うと数字にマッチします * `{1,2}`はその一つ前のパターンが1回以上、2回まで繰り返される部分にマッチします。(`{2}`としないのは「9:30」などへの対応) しかし、「〜」という文字は`UTF-8`では似た文字が複数あり、実用上困る可能性が出てくるかもしれません。(WAVE DASH問題などと呼ばれています) また、`RegexKitLite`が対応している正規表現のシンタックスは以下になります。 ICUSyntax - RegexKitLite ただ、そもそも正規表現に慣れ親しんでいないとのことですので、日本語のサイトで基礎知識をつけつつ、以下のようなサイトで正規表現のパターンをあれこれ試してみて、感覚を掴むと良いかもしれません。