From: Badlop Date: Thu, 8 Dec 2011 11:39:58 +0000 (+0100) Subject: Frontend module to Re and Regexp (EJAB-921) X-Git-Tag: v2.1.10~16 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d30ad8ba2875a8a71261693da6c8b62ca8c73b47;p=ejabberd Frontend module to Re and Regexp (EJAB-921) --- diff --git a/src/ejabberd_regexp.erl b/src/ejabberd_regexp.erl new file mode 100644 index 000000000..77bbae517 --- /dev/null +++ b/src/ejabberd_regexp.erl @@ -0,0 +1,72 @@ +%%%---------------------------------------------------------------------- +%%% File : ejabberd_regexp.erl +%%% Author : Badlop +%%% Purpose : Frontend to Re and Regexp OTP modules +%%% Created : 8 Dec 2011 by Badlop +%%% +%%% +%%% ejabberd, Copyright (C) 2002-2011 ProcessOne +%%% +%%% This program is free software; you can redistribute it and/or +%%% modify it under the terms of the GNU General Public License as +%%% published by the Free Software Foundation; either version 2 of the +%%% License, or (at your option) any later version. +%%% +%%% This program is distributed in the hope that it will be useful, +%%% but WITHOUT ANY WARRANTY; without even the implied warranty of +%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +%%% General Public License for more details. +%%% +%%% You should have received a copy of the GNU General Public License +%%% along with this program; if not, write to the Free Software +%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +%%% 02111-1307 USA +%%% +%%%---------------------------------------------------------------------- + +-module(ejabberd_regexp). +-compile([export_all]). + +exec(ReM, ReF, ReA, RgM, RgF, RgA) -> + try apply(ReM, ReF, ReA) + catch + error:undef -> + apply(RgM, RgF, RgA); + A:B -> + {error, {A, B}} + end. + +run(String, Regexp) -> + case exec(re, run, [String, Regexp, [{capture, none}]], regexp, first_match, [String, Regexp]) of + {match, _, _} -> match; + {match, _} -> match; + match -> match; + nomatch -> nomatch; + {error, Error} -> {error, Error} + end. + +split(String, Regexp) -> + case exec(re, split, [String, Regexp, [{return, list}]], regexp, split, [String, Regexp]) of + {ok, FieldList} -> FieldList; + {error, Error} -> throw(Error); + A -> A + end. + +replace(String, Regexp, New) -> + case exec(re, replace, [String, Regexp, New, [{return, list}]], regexp, sub, [String, Regexp, New]) of + {ok, NewString, _RepCount} -> NewString; + {error, Error} -> throw(Error); + A -> A + end. + +greplace(String, Regexp, New) -> + case exec(re, replace, [String, Regexp, New, [global, {return, list}]], regexp, sub, [String, Regexp, New]) of + {ok, NewString, _RepCount} -> NewString; + {error, Error} -> throw(Error); + A -> A + end. + +sh_to_awk(ShRegExp) -> + case exec(xmerl_regexp, sh_to_awk, [ShRegExp], regexp, sh_to_awk, [ShRegExp]) of + A -> A + end.