2011年8月28日日曜日

Erlang re 正規表現 Sample サンプル

Erlangの正規表現モジュールであるreのサンプルを貼る。
1つの文の中で、マッチする部分が複数あった場合、すべてを箇所を抽出してほしいけど、それができない。勉強したいが、Erlangのドキュメントの英語がよくわからない。

ソース:

-module(re_Test).
-export([start/0]).

%%--------------------------------------------------------------------
%% @doc
%% @spec start() -> ok | error
%% @end
%%--------------------------------------------------------------------
start() ->
    Regexp = ["Erlang"],
    case re:compile (Regexp) of
{ok,MP} ->
   do_regexp (MP),
   ok;
{error, ErrSpec} ->
   io:format ("Compile Error ~p~n",[ErrSpec]),
   error
    end.
   
%%--------------------------------------------------------------------
%% @doc
%% @spec do_regexp(MP) ->
%% @type MP = mp()
%% @end
%%--------------------------------------------------------------------
do_regexp (MP) ->
    Subject = ["My favorite Language is Erlang."],
    Subject2 = ["I want to study Python."],
   
    case re:run(Subject, MP) of
{match, Captured} ->
   io:format ("match:~p~n",[Captured]);
nomatch ->
   io:format ("nomatch~n")
    end,
   
    case re:run(Subject2, MP) of
{match, Captured2} ->
   io:format ("match:~p~n",[Captured2]);
nomatch  ->
   io:format ("nomatch2~n")
    end.

出力結果:
1> c(re_Test).
{ok,re_Test}
2> re_Test:start().
match:[{24,6}]
nomatch2
ok