# HG changeset patch # User David Bateman # Date 1206388540 14400 # Node ID cc31c5002c96d7eff20e1b406f724ac89acfb0b9 # Parent acca752a3b965bdacd3d0a783185598307e49920 Add the regexptranslate function diff --git a/scripts/ChangeLog b/scripts/ChangeLog --- a/scripts/ChangeLog +++ b/scripts/ChangeLog @@ -4,6 +4,8 @@ * miscellaneous/namelengthmax.m: New function. + * strings/regexptranslate.m: New function. + 2008-03-21 David Bateman * specfun/reallog.m, specfun/realpow.m, specfun/realsqrt.m: New diff --git a/scripts/strings/Makefile.in b/scripts/strings/Makefile.in --- a/scripts/strings/Makefile.in +++ b/scripts/strings/Makefile.in @@ -35,7 +35,7 @@ SOURCES = base2dec.m bin2dec.m blanks.m deblank.m dec2base.m \ dec2bin.m dec2hex.m findstr.m hex2dec.m index.m isletter.m \ - lower.m mat2str.m rindex.m split.m str2double.m str2mat.m \ + lower.m mat2str.m regexptranslate.m rindex.m split.m str2double.m str2mat.m \ str2num.m strcat.m cstrcat.m strcmpi.m strfind.m strjust.m strmatch.m \ strncmpi.m strrep.m strtok.m strtrim.m strtrunc.m strvcat.m \ substr.m upper.m diff --git a/scripts/strings/regexptranslate.m b/scripts/strings/regexptranslate.m new file mode 100644 --- /dev/null +++ b/scripts/strings/regexptranslate.m @@ -0,0 +1,48 @@ +## Copyright (C) 2008 David Bateman +## +## This file is part of Octave. +## +## Octave 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 3 of the License, or (at +## your option) any later version. +## +## Octave 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 Octave; see the file COPYING. If not, see +## . + +## -*- texinfo -*- +## @deftypefn {Function File} {} realsqrt (@var{x}) +## Return the real natural logarithm of @var{x}. If any element results in the +## return value being complex @code{reallog} produces an error. +## @seealso{log, realsqrt, realpow} +## @end deftypefn + +function y = regexptranslate (op, x) + + if (ischar (op)) + op = tolower (op); + if (strcmp ("wildcard", op)) + y = regexprep (regexprep (regexprep (x, "\\.", "\\."), "\\*", + ".*"), "\\?", "."); + elseif (strcmp ("escape", op)) + ch = {'\$', '\.', '\?', '\[', '\]'}; + y = x; + for i = 1 : length (ch) + y = regexprep (y, ch{i}, ch{i}); + endfor + else + error ("regexptranslate: unexpected operation"); + endif + else + error ("regexptranslate: expecting operation to be a string"); + endif +endfunction + +%!assert (regexptranslate ("wildcard", "/a*b?c."), "/a.*b.c\\.") +%!assert (regexptranslate ("escape", '$.?[]'), '\$\.\?\[\]')