最初にマッチしたものしかできなかった。
エレガントじゃないので、あまり載せたくないけど。
ソース:
-module(re_replace).
-export([start/0,binList_to_list/1]).
%%--------------------------------------------------------------------
%% @doc
%% @spec start() -> list() | error
%% @end
%%--------------------------------------------------------------------
start() ->
Regexp = ["Erlang"],
%% compile the Regular Expression
case re:compile (Regexp) of
{ok,MP} ->
do_regexp (MP);
{error, ErrSpec} ->
io:format ("Compile Error ~p~n",[ErrSpec]),
error
end.
%%--------------------------------------------------------------------
%% @doc
%% @spec do_regexp(MP) -> list() | error
%% @type MP = mp()
%% @end
%%--------------------------------------------------------------------
do_regexp (MP) ->
Subject = ["My favorite Language is Erlang. Erlang. Erlang."],
io:format("subject:~p~n",[Subject]),
case re:run(Subject, MP) of
{match, Captured} ->
io:format ("match:~p~n",[Captured]),
Rep = "Ruby",
io:format("Replace to ~p from \"Erlang\".~n",[Rep]),
Replace = re:replace(Subject, MP, [Rep]),
%Tmp = [binary_to_list(X) || X <- Replace],
%Replace1 = lists:append(Tmp),
binList_to_list (Replace);
nomatch ->
io:format ("nomatch~n"),
error
end.
%%--------------------------------------------------------------------
%% @doc
%% @spec binList_to_list (list() | binary()) -> list()
%% @end
%%--------------------------------------------------------------------
binList_to_list ([]) ->
[];
binList_to_list (Lists)
when is_binary(Lists)
-> binary_to_list(Lists);
binList_to_list (Lists)
when is_list(Lists)
-> [Head|Tails] = Lists,
case is_binary(Head) of
true ->
HeadStr = binary_to_list(Head),
HeadStr ++ binList_to_list(Tails);
false ->
Head ++ binList_to_list(Tails)
end.
出力結果:
4> re_replace:start().
subject:["My favorite Language is Erlang. Erlang. Erlang."]
match:[{24,6}]
Replace to "Ruby" from "Erlang".
"My favorite Language is Ruby. Erlang. Erlang."
5>
今ひらめいた。パターンマッチした文字を全て置換する方法。
今度載せようと思う。
0 件のコメント:
コメントを投稿