Mercurial > hg > octave-lyh
annotate scripts/strings/regexptranslate.m @ 16923:5d08a2ec7edb
doc: Move graphics object functions into the right section
* plot.txi: Merge node "Use of axis, line, and patch Functions" into
node "Graphics Objects".
* octave.texi: Remove node "Use of axis, line, and patch Functions"
author | Mike Miller <mtmiller@ieee.org> |
---|---|
date | Mon, 08 Jul 2013 09:13:30 -0400 |
parents | 638390eacec4 |
children | bc924baa2c4e |
rev | line source |
---|---|
14138
72c96de7a403
maint: update copyright notices for 2012
John W. Eaton <jwe@octave.org>
parents:
13184
diff
changeset
|
1 ## Copyright (C) 2008-2012 David Bateman |
7629
cc31c5002c96
Add the regexptranslate function
David Bateman <dbateman@free.fr>
parents:
diff
changeset
|
2 ## |
cc31c5002c96
Add the regexptranslate function
David Bateman <dbateman@free.fr>
parents:
diff
changeset
|
3 ## This file is part of Octave. |
cc31c5002c96
Add the regexptranslate function
David Bateman <dbateman@free.fr>
parents:
diff
changeset
|
4 ## |
cc31c5002c96
Add the regexptranslate function
David Bateman <dbateman@free.fr>
parents:
diff
changeset
|
5 ## Octave is free software; you can redistribute it and/or modify it |
cc31c5002c96
Add the regexptranslate function
David Bateman <dbateman@free.fr>
parents:
diff
changeset
|
6 ## under the terms of the GNU General Public License as published by |
cc31c5002c96
Add the regexptranslate function
David Bateman <dbateman@free.fr>
parents:
diff
changeset
|
7 ## the Free Software Foundation; either version 3 of the License, or (at |
cc31c5002c96
Add the regexptranslate function
David Bateman <dbateman@free.fr>
parents:
diff
changeset
|
8 ## your option) any later version. |
cc31c5002c96
Add the regexptranslate function
David Bateman <dbateman@free.fr>
parents:
diff
changeset
|
9 ## |
cc31c5002c96
Add the regexptranslate function
David Bateman <dbateman@free.fr>
parents:
diff
changeset
|
10 ## Octave is distributed in the hope that it will be useful, but |
cc31c5002c96
Add the regexptranslate function
David Bateman <dbateman@free.fr>
parents:
diff
changeset
|
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of |
cc31c5002c96
Add the regexptranslate function
David Bateman <dbateman@free.fr>
parents:
diff
changeset
|
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
cc31c5002c96
Add the regexptranslate function
David Bateman <dbateman@free.fr>
parents:
diff
changeset
|
13 ## General Public License for more details. |
cc31c5002c96
Add the regexptranslate function
David Bateman <dbateman@free.fr>
parents:
diff
changeset
|
14 ## |
cc31c5002c96
Add the regexptranslate function
David Bateman <dbateman@free.fr>
parents:
diff
changeset
|
15 ## You should have received a copy of the GNU General Public License |
cc31c5002c96
Add the regexptranslate function
David Bateman <dbateman@free.fr>
parents:
diff
changeset
|
16 ## along with Octave; see the file COPYING. If not, see |
cc31c5002c96
Add the regexptranslate function
David Bateman <dbateman@free.fr>
parents:
diff
changeset
|
17 ## <http://www.gnu.org/licenses/>. |
cc31c5002c96
Add the regexptranslate function
David Bateman <dbateman@free.fr>
parents:
diff
changeset
|
18 |
cc31c5002c96
Add the regexptranslate function
David Bateman <dbateman@free.fr>
parents:
diff
changeset
|
19 ## -*- texinfo -*- |
7983 | 20 ## @deftypefn {Function File} {} regexptranslate (@var{op}, @var{s}) |
13184
8a124aeb7ded
regexptranslate.m: Correctly escape *all* regular expression special characters.
Rik <octave@nomad.inbox5.com>
parents:
12469
diff
changeset
|
21 ## Translate a string for use in a regular expression. This may |
7983 | 22 ## include either wildcard replacement or special character escaping. |
13184
8a124aeb7ded
regexptranslate.m: Correctly escape *all* regular expression special characters.
Rik <octave@nomad.inbox5.com>
parents:
12469
diff
changeset
|
23 ## The behavior is controlled by @var{op} which can take the following |
7983 | 24 ## values |
25 ## | |
26 ## @table @asis | |
27 ## @item "wildcard" | |
13184
8a124aeb7ded
regexptranslate.m: Correctly escape *all* regular expression special characters.
Rik <octave@nomad.inbox5.com>
parents:
12469
diff
changeset
|
28 ## The wildcard characters @code{.}, @code{*}, and @code{?} are replaced |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
29 ## with wildcards that are appropriate for a regular expression. |
9036
58604c45ca74
Cleanup of data types related documentation
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
30 ## For example: |
10821
693e22af08ae
Grammarcheck documentation of m-files
Rik <octave@nomad.inbox5.com>
parents:
10549
diff
changeset
|
31 ## |
8442
502e58a0d44f
Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
7983
diff
changeset
|
32 ## @example |
502e58a0d44f
Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
7983
diff
changeset
|
33 ## @group |
502e58a0d44f
Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
7983
diff
changeset
|
34 ## regexptranslate ("wildcard", "*.m") |
502e58a0d44f
Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
7983
diff
changeset
|
35 ## @result{} ".*\.m" |
502e58a0d44f
Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
7983
diff
changeset
|
36 ## @end group |
502e58a0d44f
Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
7983
diff
changeset
|
37 ## @end example |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
38 ## |
7983 | 39 ## @item "escape" |
40 ## The characters @code{$.?[]}, that have special meaning for regular | |
9036
58604c45ca74
Cleanup of data types related documentation
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
41 ## expressions are escaped so that they are treated literally. For example: |
10821
693e22af08ae
Grammarcheck documentation of m-files
Rik <octave@nomad.inbox5.com>
parents:
10549
diff
changeset
|
42 ## |
8442
502e58a0d44f
Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
7983
diff
changeset
|
43 ## @example |
502e58a0d44f
Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
7983
diff
changeset
|
44 ## @group |
502e58a0d44f
Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
7983
diff
changeset
|
45 ## regexptranslate ("escape", "12.5") |
502e58a0d44f
Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
7983
diff
changeset
|
46 ## @result{} "12\.5" |
502e58a0d44f
Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
7983
diff
changeset
|
47 ## @end group |
502e58a0d44f
Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
7983
diff
changeset
|
48 ## @end example |
10821
693e22af08ae
Grammarcheck documentation of m-files
Rik <octave@nomad.inbox5.com>
parents:
10549
diff
changeset
|
49 ## |
7983 | 50 ## @end table |
8442
502e58a0d44f
Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
7983
diff
changeset
|
51 ## @seealso{regexp, regexpi, regexprep} |
7629
cc31c5002c96
Add the regexptranslate function
David Bateman <dbateman@free.fr>
parents:
diff
changeset
|
52 ## @end deftypefn |
cc31c5002c96
Add the regexptranslate function
David Bateman <dbateman@free.fr>
parents:
diff
changeset
|
53 |
11469
c776f063fefe
Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents:
10821
diff
changeset
|
54 function y = regexptranslate (op, s) |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
55 |
14552
86854d032a37
maint: miscellaneous style fixes for .m files
John W. Eaton <jwe@octave.org>
parents:
14138
diff
changeset
|
56 if (nargin != 2) |
8442
502e58a0d44f
Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
7983
diff
changeset
|
57 print_usage (); |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
58 endif |
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
59 |
13184
8a124aeb7ded
regexptranslate.m: Correctly escape *all* regular expression special characters.
Rik <octave@nomad.inbox5.com>
parents:
12469
diff
changeset
|
60 if (! ischar (op)) |
8a124aeb7ded
regexptranslate.m: Correctly escape *all* regular expression special characters.
Rik <octave@nomad.inbox5.com>
parents:
12469
diff
changeset
|
61 error ("regexptranslate: operation OP must be a string"); |
8a124aeb7ded
regexptranslate.m: Correctly escape *all* regular expression special characters.
Rik <octave@nomad.inbox5.com>
parents:
12469
diff
changeset
|
62 endif |
8a124aeb7ded
regexptranslate.m: Correctly escape *all* regular expression special characters.
Rik <octave@nomad.inbox5.com>
parents:
12469
diff
changeset
|
63 |
8a124aeb7ded
regexptranslate.m: Correctly escape *all* regular expression special characters.
Rik <octave@nomad.inbox5.com>
parents:
12469
diff
changeset
|
64 op = tolower (op); |
8a124aeb7ded
regexptranslate.m: Correctly escape *all* regular expression special characters.
Rik <octave@nomad.inbox5.com>
parents:
12469
diff
changeset
|
65 if (strcmp ("wildcard", op)) |
8a124aeb7ded
regexptranslate.m: Correctly escape *all* regular expression special characters.
Rik <octave@nomad.inbox5.com>
parents:
12469
diff
changeset
|
66 y = regexprep (regexprep (regexprep (s, '\.', '\.'), |
8a124aeb7ded
regexptranslate.m: Correctly escape *all* regular expression special characters.
Rik <octave@nomad.inbox5.com>
parents:
12469
diff
changeset
|
67 '\*', '.*'), |
8a124aeb7ded
regexptranslate.m: Correctly escape *all* regular expression special characters.
Rik <octave@nomad.inbox5.com>
parents:
12469
diff
changeset
|
68 '\?', '.'); |
8a124aeb7ded
regexptranslate.m: Correctly escape *all* regular expression special characters.
Rik <octave@nomad.inbox5.com>
parents:
12469
diff
changeset
|
69 elseif (strcmp ("escape", op)) |
14560
638390eacec4
regexptranslate.m: Fix failing %!test due to new regexp single quote rules.
Rik <octave@nomad.inbox5.com>
parents:
14552
diff
changeset
|
70 y = regexprep (s, '([^\w])', '\\$1'); |
7629
cc31c5002c96
Add the regexptranslate function
David Bateman <dbateman@free.fr>
parents:
diff
changeset
|
71 else |
13184
8a124aeb7ded
regexptranslate.m: Correctly escape *all* regular expression special characters.
Rik <octave@nomad.inbox5.com>
parents:
12469
diff
changeset
|
72 error ("regexptranslate: invalid operation OP"); |
7629
cc31c5002c96
Add the regexptranslate function
David Bateman <dbateman@free.fr>
parents:
diff
changeset
|
73 endif |
13184
8a124aeb7ded
regexptranslate.m: Correctly escape *all* regular expression special characters.
Rik <octave@nomad.inbox5.com>
parents:
12469
diff
changeset
|
74 |
7629
cc31c5002c96
Add the regexptranslate function
David Bateman <dbateman@free.fr>
parents:
diff
changeset
|
75 endfunction |
cc31c5002c96
Add the regexptranslate function
David Bateman <dbateman@free.fr>
parents:
diff
changeset
|
76 |
13184
8a124aeb7ded
regexptranslate.m: Correctly escape *all* regular expression special characters.
Rik <octave@nomad.inbox5.com>
parents:
12469
diff
changeset
|
77 |
7629
cc31c5002c96
Add the regexptranslate function
David Bateman <dbateman@free.fr>
parents:
diff
changeset
|
78 %!assert (regexptranslate ("wildcard", "/a*b?c."), "/a.*b.c\\.") |
13184
8a124aeb7ded
regexptranslate.m: Correctly escape *all* regular expression special characters.
Rik <octave@nomad.inbox5.com>
parents:
12469
diff
changeset
|
79 %!assert (regexptranslate ("escape", '$.?[abc]'), '\$\.\?\[abc\]') |
8a124aeb7ded
regexptranslate.m: Correctly escape *all* regular expression special characters.
Rik <octave@nomad.inbox5.com>
parents:
12469
diff
changeset
|
80 |
8a124aeb7ded
regexptranslate.m: Correctly escape *all* regular expression special characters.
Rik <octave@nomad.inbox5.com>
parents:
12469
diff
changeset
|
81 %% Test input validation |
8a124aeb7ded
regexptranslate.m: Correctly escape *all* regular expression special characters.
Rik <octave@nomad.inbox5.com>
parents:
12469
diff
changeset
|
82 %!error <Invalid call to regexptranslate> regexptranslate () |
8a124aeb7ded
regexptranslate.m: Correctly escape *all* regular expression special characters.
Rik <octave@nomad.inbox5.com>
parents:
12469
diff
changeset
|
83 %!error <Invalid call to regexptranslate> regexptranslate ("wildcard") |
8a124aeb7ded
regexptranslate.m: Correctly escape *all* regular expression special characters.
Rik <octave@nomad.inbox5.com>
parents:
12469
diff
changeset
|
84 %!error <Invalid call to regexptranslate> regexptranslate ("a", "b", "c") |
8a124aeb7ded
regexptranslate.m: Correctly escape *all* regular expression special characters.
Rik <octave@nomad.inbox5.com>
parents:
12469
diff
changeset
|
85 %!error <invalid operation> regexptranslate ("foo", "abc") |
8a124aeb7ded
regexptranslate.m: Correctly escape *all* regular expression special characters.
Rik <octave@nomad.inbox5.com>
parents:
12469
diff
changeset
|
86 %!error <operation OP must be a string> regexptranslate (10, "abc") |
8a124aeb7ded
regexptranslate.m: Correctly escape *all* regular expression special characters.
Rik <octave@nomad.inbox5.com>
parents:
12469
diff
changeset
|
87 |