追記)他のパーサーコンビネータライブラリとしてNimbleParsecがあります。Valimさんがcommitしているという状況なので、これから触られる方はNimbleParsecの方を触られた方が良さそうです。NimbleParsecについて、別記事に書きましたのでよろしければご覧ください。Calendar」に参加させていただくことになりました、@koga1020と申します。アドバイザーと一緒に、Elixirに関する情報をお届けしてまいります。本題この記事ではElixirのパーサーコンビネータライブラリCombineの使い方を解説します。こちらのブログがパーサーコンビネータの概念を理解するのに良かったです。id:anatooのブログ小さいパーサーの入力と出力をつなぎ合わせて、大きなパーサーを作るイメージですね。何が嬉しいのか使いこなすと、正規表現だけで頑張らず、すっきりとしたコードを書くことができます。CombineElixirのパーサーコンビネータライブラリにCombineがあります。v0.10.0インストール公式の通り、depsに追加後、依存パッケージをインストールすれば利用できます。mixiex環境で挙動を確認することが出来ます。char())["H"]どんな風に書けるの?公式のサンプルを元に、処理の流れを解説します。いうリストに変換していますね。"2014-07-22T12:30:05.0002Z"という文字は、↓↓の図のように分解できます(ZはUTCを表しています)。文字"Z"を取り出して"UTC"に置き換えるこんな感じになりますね。5.0002)こんな感じです。日付(=date)のparserと時刻(=time)のパーサーを組み合わせて、datetimeのパーサーが作れそうです。endend日本語で整理したparseの流れが直感的に記述できています。このようにパイプでつなげる記述はElixirならではの記述ですね。ちなみにlabel()はパースしたい文字が意図したformatではなくエラーが発生した場合に、どんな値を期待しているかを表示するためのものです。1."}パースをどのように実行するかはCombine.Parsers.Baseモジュールの関数、何にマッチさせるかはCombine.Parsers.Textモジュールの関数で書くことができます。"c"]]ドキュメントにはExampleもしっかり掲載されていますので、各関数のExampleの挙動を追ってみるとすぐに覚えられると思います。まとめElixirのパーサーコンビネータライブラリCombineの紹介でした。関数型言語らしく、つらつらと処理の流れをパイプで書けると可読性も高く、なにより楽しいです笑パターンマッチのおかげで通常の正規表現の記述もしやすいElixirですが、パーサーコンビネータでの実装も知っておくと良さそうです。※応募多数により、増枠しました「fukuoka.ex#11:DB/データサイエンスにコネクトするElixir」を6/22(金)19時に開催します。