swiftで正規表現使って抽出と置換をする

regular-expression

公開日: 

swiftで正規表現使って抽出する方法とか調べてみたらなんか意外にスッキリした方法が見つからなかったので、

やりかたの備忘録てきなものです。

 

モダンを謳ってるswiftのことだから正規表現用の素敵メソッドみたいのあるんでしょ!

 

とか思ってたらありませんでした。。。

モダンっぽくできるような事ができるものを作ってる人もいるにはいました。

SwiftでJavascriptの正規表現リテラルっぽいものを実装してみた。

いやはやありがたやありがたや。

 

ですが、ライブラリっぽいのをいれるのはなんか重くなったりするかなぁとか思ったりもしたので

標準のやつだけで正規表現できないかと調べてみました。

 

sponcer link

抽出編

調べてみると案外昔馴染みの方法でやるしかないかなぁといった印象だったので、

昔のコードをswiftに置き換えてみました。

iOS アプリ開発での正規表現を使った文字列処理がややこしい

 

 

先人の知恵を借りつつ今回は

という文字列から、hoge、hoge123, huge, huge456を抽出するようなコードを書きました。

 

出力結果は以下の感じ

 

コツは、検索する対象をNSStringにしないといけないところ。

result.rangeAtIndexの返り値がNSRangeでかえってくるんだけど、StringのsubstringWithRangeはRangeを求めてくるんす。

なんだかイマイチ行けてない感はしますが、求めてくるんだからしょうがない。

それともStringでやる方法が別にあるのかもしれないですが、、、

誰かエロイ人知ってたら教えて下さい。

 

追記:

おまけに書いてる本を書いた神からStringでもかけるよとの導きを頂きました。

だがしかしコードが長くなるのでObj-cの力を借りたくないというこだわりがない限りはNSStringのが楽そうです。

ちなみにStringにした場合はcontent.lengthがないので代わりにcountElements(content)を使ってます。

 

置換編

正規表現して取ってきた文字列を置換したいって事が多いですよね。

置換は案外簡単にさくっといけちゃいます。

抽出した結果をforとかで回さなくていいんですよ奥さん!!

 

今回は[test|hoge|hoge123] と[]に囲まれてるところをtest:hoge:hoge123とかに置換してみます。

出力結果

今度は普通にStringでいけちゃいます。

コツは

$1とかで正規表現でマッチした結果を呼び出せます。

 

 

 

おわり

以外に調べたら正規表現苦戦しちゃいました。

正規表現はコードのほうがいつも考えるの苦戦しますが、書き方に苦戦しちゃいました。。

誰かの助けになればいいとおもいます。

 

おまけ

ちなみに弊社の神が書かれたsiwft本売ってます。

開発のプロが教える Swift標準ガイドブック

 

こちらにはswitchで正規表現を簡単に出来る方法なども載っているので気になる方は是非購入してみてください。

 

おまけ2

正規表現使うときは僕はここにお世話になってます。

Rubular

  • このエントリーをはてなブックマークに追加
  • Pocket
PAGE TOP ↑