Mercurial > octave
annotate libinterp/corefcn/regexp.cc @ 28961:d9d028b479ac
doc: Use @code{} within alternate text for @xref,@pxref macros in libinterp/
* debug.cc, error.cc, qz.cc, regexp.cc, sub2ind.cc:
Use @code{} within alternate text for @xref,@pxref macros.
author | Rik <rik@octave.org> |
---|---|
date | Mon, 19 Oct 2020 09:49:03 -0700 |
parents | bd51beb6205e |
children | 10a35049bad7 |
rev | line source |
---|---|
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
1 //////////////////////////////////////////////////////////////////////// |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
2 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
3 // Copyright (C) 2002-2020 The Octave Project Developers |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
4 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
5 // See the file COPYRIGHT.md in the top-level directory of this |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
6 // distribution or <https://octave.org/copyright/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
7 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
8 // This file is part of Octave. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
9 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
10 // Octave is free software: you can redistribute it and/or modify it |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
11 // under the terms of the GNU General Public License as published by |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
12 // the Free Software Foundation, either version 3 of the License, or |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
13 // (at your option) any later version. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
14 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
15 // Octave is distributed in the hope that it will be useful, but |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
16 // WITHOUT ANY WARRANTY; without even the implied warranty of |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
18 // GNU General Public License for more details. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
19 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
20 // You should have received a copy of the GNU General Public License |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
21 // along with Octave; see the file COPYING. If not, see |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
22 // <https://www.gnu.org/licenses/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
23 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
24 //////////////////////////////////////////////////////////////////////// |
5582 | 25 |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21575
diff
changeset
|
26 #if defined (HAVE_CONFIG_H) |
21301
40de9f8f23a6
Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
27 # include "config.h" |
5582 | 28 #endif |
29 | |
14024
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
30 #include <list> |
5765 | 31 #include <sstream> |
32 | |
5582 | 33 #include <pcre.h> |
34 | |
14024
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
35 #include "base-list.h" |
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
36 #include "oct-locbuf.h" |
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
37 #include "quit.h" |
16940
99122191d3dd
maint: Rename regexp.h to lo-regexp.h, regexp.cc to lo-regexp.cc in liboctave.
Rik <rik@octave.org>
parents:
16919
diff
changeset
|
38 #include "lo-regexp.h" |
14024
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
39 #include "str-vec.h" |
8093
dcc31f473596
Treat PCRE lookbehind operators in a manner that is approximately correct
David Bateman <dbateman@free.fr>
parents:
8021
diff
changeset
|
40 |
15039
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14854
diff
changeset
|
41 #include "defun.h" |
14024
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
42 #include "Cell.h" |
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
43 #include "error.h" |
21100
e39e05d90788
Switch gripe_XXX to either err_XXX or warn_XXX naming scheme.
Rik <rik@octave.org>
parents:
21055
diff
changeset
|
44 #include "errwarn.h" |
14024
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
45 #include "oct-map.h" |
20940
48b2ad5ee801
maint: Rename oct-obj.[cc|h] to ovl.[cc|h] for clarity.
Rik <rik@octave.org>
parents:
20939
diff
changeset
|
46 #include "ovl.h" |
14024
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
47 #include "utils.h" |
5785 | 48 |
14543
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
49 // Replace backslash escapes in a string with the real values. We need |
15541
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
50 // two special functions instead of the one in utils.cc because the set |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
51 // of escape sequences used for regexp patterns and replacement strings |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
52 // is different from those used in the *printf functions. |
14543
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
53 |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
54 static std::string |
22722
e6fac42c8d56
Fix regexp handling of beginning/end word match for double-quoted pattern strings (bug #49451).
Rik <rik@octave.org>
parents:
22599
diff
changeset
|
55 do_regexp_ptn_string_escapes (const std::string& s, bool is_sq_str) |
14543
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
56 { |
27565
74173f04d2a3
Use syntax for UTF-8 mode with PCRE that is used in the configure test (bug #35910).
Markus Mützel <markus.muetzel@gmx.de>
parents:
27537
diff
changeset
|
57 std::string retval; |
14543
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
58 |
27565
74173f04d2a3
Use syntax for UTF-8 mode with PCRE that is used in the configure test (bug #35910).
Markus Mützel <markus.muetzel@gmx.de>
parents:
27537
diff
changeset
|
59 size_t i = 0; |
14543
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
60 size_t j = 0; |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
61 size_t len = s.length (); |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
62 |
27278
94d490815aa8
Correctly handle UTF-8 in regular expressions (bug #35910).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26566
diff
changeset
|
63 retval.resize (len+i); |
14543
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
64 |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
65 while (j < len) |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
66 { |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
67 if (s[j] == '\\' && j+1 < len) |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
68 { |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
69 switch (s[++j]) |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
70 { |
15541
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
71 case 'b': // backspace |
22722
e6fac42c8d56
Fix regexp handling of beginning/end word match for double-quoted pattern strings (bug #49451).
Rik <rik@octave.org>
parents:
22599
diff
changeset
|
72 if (is_sq_str) |
e6fac42c8d56
Fix regexp handling of beginning/end word match for double-quoted pattern strings (bug #49451).
Rik <rik@octave.org>
parents:
22599
diff
changeset
|
73 retval[i] = '\b'; |
e6fac42c8d56
Fix regexp handling of beginning/end word match for double-quoted pattern strings (bug #49451).
Rik <rik@octave.org>
parents:
22599
diff
changeset
|
74 else |
e6fac42c8d56
Fix regexp handling of beginning/end word match for double-quoted pattern strings (bug #49451).
Rik <rik@octave.org>
parents:
22599
diff
changeset
|
75 { |
e6fac42c8d56
Fix regexp handling of beginning/end word match for double-quoted pattern strings (bug #49451).
Rik <rik@octave.org>
parents:
22599
diff
changeset
|
76 // Pass escape sequence through |
e6fac42c8d56
Fix regexp handling of beginning/end word match for double-quoted pattern strings (bug #49451).
Rik <rik@octave.org>
parents:
22599
diff
changeset
|
77 retval[i] = '\\'; |
e6fac42c8d56
Fix regexp handling of beginning/end word match for double-quoted pattern strings (bug #49451).
Rik <rik@octave.org>
parents:
22599
diff
changeset
|
78 retval[++i] = 'b'; |
e6fac42c8d56
Fix regexp handling of beginning/end word match for double-quoted pattern strings (bug #49451).
Rik <rik@octave.org>
parents:
22599
diff
changeset
|
79 } |
14543
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
80 break; |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
81 |
16918
ab46b5c77669
Fix word boundary handling in regexp pattern (bug #38778)
Mike Miller <mtmiller@ieee.org>
parents:
16816
diff
changeset
|
82 // Translate \< and \> to PCRE word boundary |
ab46b5c77669
Fix word boundary handling in regexp pattern (bug #38778)
Mike Miller <mtmiller@ieee.org>
parents:
16816
diff
changeset
|
83 case '<': // begin word boundary |
ab46b5c77669
Fix word boundary handling in regexp pattern (bug #38778)
Mike Miller <mtmiller@ieee.org>
parents:
16816
diff
changeset
|
84 case '>': // end word boundary |
ab46b5c77669
Fix word boundary handling in regexp pattern (bug #38778)
Mike Miller <mtmiller@ieee.org>
parents:
16816
diff
changeset
|
85 retval[i] = '\\'; |
ab46b5c77669
Fix word boundary handling in regexp pattern (bug #38778)
Mike Miller <mtmiller@ieee.org>
parents:
16816
diff
changeset
|
86 retval[++i] = 'b'; |
ab46b5c77669
Fix word boundary handling in regexp pattern (bug #38778)
Mike Miller <mtmiller@ieee.org>
parents:
16816
diff
changeset
|
87 break; |
ab46b5c77669
Fix word boundary handling in regexp pattern (bug #38778)
Mike Miller <mtmiller@ieee.org>
parents:
16816
diff
changeset
|
88 |
20211
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
89 case 'o': // octal input |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
90 { |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
91 bool bad_esc_seq = (j+1 >= len); |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
92 |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
93 bool brace = false; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
94 if (! bad_esc_seq && s[++j] == '{') |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
95 { |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
96 brace = true; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
97 j++; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
98 } |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
99 |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
100 int tmpi = 0; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
101 size_t k; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
102 for (k = j; k < std::min (j+3+brace, len); k++) |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
103 { |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
104 int digit = s[k] - '0'; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
105 if (digit < 0 || digit > 7) |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
106 break; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
107 tmpi <<= 3; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
108 tmpi += digit; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
109 } |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
110 if (bad_esc_seq || (brace && s[k++] != '}')) |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
111 { |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
112 tmpi = 0; |
23804
8057d3f0673d
Use C++11 raw string literals to avoid escaping backslashes in strings.
Rik <rik@octave.org>
parents:
23777
diff
changeset
|
113 warning (R"(malformed octal escape sequence '\o' -- converting to '\0')"); |
20211
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
114 } |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
115 retval[i] = tmpi; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
116 j = k - 1; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
117 break; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
118 } |
15541
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
119 |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
120 default: // pass escape sequence through |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
121 retval[i] = '\\'; |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
122 retval[++i] = s[j]; |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
123 break; |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
124 } |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
125 } |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
126 else |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
127 { |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
128 retval[i] = s[j]; |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
129 } |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
130 |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
131 i++; |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
132 j++; |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
133 } |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
134 |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
135 retval.resize (i); |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
136 |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
137 return retval; |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
138 } |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
139 |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
140 static std::string |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
141 do_regexp_rep_string_escapes (const std::string& s) |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
142 { |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
143 std::string retval; |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
144 |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
145 size_t i = 0; |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
146 size_t j = 0; |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
147 size_t len = s.length (); |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
148 |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
149 retval.resize (len); |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
150 |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
151 while (j < len) |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
152 { |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
153 if (s[j] == '\\' && j+1 < len) |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
154 { |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
155 switch (s[++j]) |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
156 { |
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
157 case 'a': // alarm |
14543
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
158 retval[i] = '\a'; |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
159 break; |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
160 |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
161 case 'b': // backspace |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
162 retval[i] = '\b'; |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
163 break; |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
164 |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
165 case 'f': // formfeed |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
166 retval[i] = '\f'; |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
167 break; |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
168 |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
169 case 'n': // newline |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
170 retval[i] = '\n'; |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
171 break; |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
172 |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
173 case 'r': // carriage return |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
174 retval[i] = '\r'; |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
175 break; |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
176 |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
177 case 't': // horizontal tab |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
178 retval[i] = '\t'; |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
179 break; |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
180 |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
181 case 'v': // vertical tab |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
182 retval[i] = '\v'; |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
183 break; |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
184 |
24751
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
185 case '0': |
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
186 case '1': |
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
187 case '2': |
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
188 case '3': |
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
189 case '4': |
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
190 case '5': |
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
191 case '6': |
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
192 case '7': // octal input |
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
193 { |
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
194 size_t k; |
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
195 int tmpi = s[j] - '0'; |
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
196 for (k = j+1; k < std::min (j+3, len); k++) |
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
197 { |
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
198 int digit = s[k] - '0'; |
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
199 if (digit < 0 || digit > 7) |
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
200 break; |
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
201 tmpi <<= 3; |
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
202 tmpi += digit; |
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
203 } |
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
204 retval[i] = tmpi; |
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
205 j = k - 1; |
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
206 break; |
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
207 } |
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
208 |
20211
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
209 case 'o': // octal input |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
210 { |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
211 bool bad_esc_seq = (j+1 >= len); |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
212 |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
213 bool brace = false; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
214 if (! bad_esc_seq && s[++j] == '{') |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
215 { |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
216 brace = true; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
217 j++; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
218 } |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
219 |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
220 int tmpi = 0; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
221 size_t k; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
222 for (k = j; k < std::min (j+3+brace, len); k++) |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
223 { |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
224 int digit = s[k] - '0'; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
225 if (digit < 0 || digit > 7) |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
226 break; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
227 tmpi <<= 3; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
228 tmpi += digit; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
229 } |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
230 if (bad_esc_seq || (brace && s[k++] != '}')) |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
231 { |
23804
8057d3f0673d
Use C++11 raw string literals to avoid escaping backslashes in strings.
Rik <rik@octave.org>
parents:
23777
diff
changeset
|
232 warning (R"(malformed octal escape sequence '\o' -- converting to '\0')"); |
20211
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
233 tmpi = 0; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
234 } |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
235 retval[i] = tmpi; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
236 j = k - 1; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
237 break; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
238 } |
14543
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
239 |
20211
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
240 case 'x': // hex input |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
241 { |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
242 bool bad_esc_seq = (j+1 >= len); |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
243 |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
244 bool brace = false; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
245 if (! bad_esc_seq && s[++j] == '{') |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
246 { |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
247 brace = true; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
248 j++; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
249 } |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
250 |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
251 int tmpi = 0; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
252 size_t k; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
253 for (k = j; k < std::min (j+2+brace, len); k++) |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
254 { |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
255 if (! isxdigit (s[k])) |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
256 break; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
257 |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
258 tmpi <<= 4; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
259 int digit = s[k]; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
260 if (digit >= 'a') |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
261 tmpi += digit - 'a' + 10; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
262 else if (digit >= 'A') |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
263 tmpi += digit - 'A' + 10; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
264 else |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
265 tmpi += digit - '0'; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
266 } |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
267 if (bad_esc_seq || (brace && s[k++] != '}')) |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
268 { |
23804
8057d3f0673d
Use C++11 raw string literals to avoid escaping backslashes in strings.
Rik <rik@octave.org>
parents:
23777
diff
changeset
|
269 warning (R"(malformed hex escape sequence '\x' -- converting to '\0')"); |
20211
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
270 tmpi = 0; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
271 } |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
272 retval[i] = tmpi; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
273 j = k - 1; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
274 break; |
f2bc7d23295d
Add special hex/octal escape sequence processing for regexp.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
275 } |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
276 |
20290
b6a59cc96bfa
Process backslashes in regexprep replacement strings in Matlab compatible fashion (bug #45407).
Rik <rik@octave.org>
parents:
20232
diff
changeset
|
277 // Both dollar sign (for capture buffer) and backslash are |
b6a59cc96bfa
Process backslashes in regexprep replacement strings in Matlab compatible fashion (bug #45407).
Rik <rik@octave.org>
parents:
20232
diff
changeset
|
278 // passed through with their escape backslash. The processing |
b6a59cc96bfa
Process backslashes in regexprep replacement strings in Matlab compatible fashion (bug #45407).
Rik <rik@octave.org>
parents:
20232
diff
changeset
|
279 // for these must occur during the actual replacement operation |
b6a59cc96bfa
Process backslashes in regexprep replacement strings in Matlab compatible fashion (bug #45407).
Rik <rik@octave.org>
parents:
20232
diff
changeset
|
280 // in lo-regexp.cc. |
b6a59cc96bfa
Process backslashes in regexprep replacement strings in Matlab compatible fashion (bug #45407).
Rik <rik@octave.org>
parents:
20232
diff
changeset
|
281 case '$': // pass dollar sign through with escape |
b6a59cc96bfa
Process backslashes in regexprep replacement strings in Matlab compatible fashion (bug #45407).
Rik <rik@octave.org>
parents:
20232
diff
changeset
|
282 retval[i] = '\\'; retval[++i] = '$'; |
b6a59cc96bfa
Process backslashes in regexprep replacement strings in Matlab compatible fashion (bug #45407).
Rik <rik@octave.org>
parents:
20232
diff
changeset
|
283 break; |
b6a59cc96bfa
Process backslashes in regexprep replacement strings in Matlab compatible fashion (bug #45407).
Rik <rik@octave.org>
parents:
20232
diff
changeset
|
284 |
b6a59cc96bfa
Process backslashes in regexprep replacement strings in Matlab compatible fashion (bug #45407).
Rik <rik@octave.org>
parents:
20232
diff
changeset
|
285 case '\\': // pass backslash through with escape |
b6a59cc96bfa
Process backslashes in regexprep replacement strings in Matlab compatible fashion (bug #45407).
Rik <rik@octave.org>
parents:
20232
diff
changeset
|
286 retval[i] = '\\'; retval[++i] = '\\'; |
b6a59cc96bfa
Process backslashes in regexprep replacement strings in Matlab compatible fashion (bug #45407).
Rik <rik@octave.org>
parents:
20232
diff
changeset
|
287 break; |
b6a59cc96bfa
Process backslashes in regexprep replacement strings in Matlab compatible fashion (bug #45407).
Rik <rik@octave.org>
parents:
20232
diff
changeset
|
288 |
b6a59cc96bfa
Process backslashes in regexprep replacement strings in Matlab compatible fashion (bug #45407).
Rik <rik@octave.org>
parents:
20232
diff
changeset
|
289 default: // convert escaped character to unescaped char |
b6a59cc96bfa
Process backslashes in regexprep replacement strings in Matlab compatible fashion (bug #45407).
Rik <rik@octave.org>
parents:
20232
diff
changeset
|
290 retval[i] = s[j]; |
14543
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
291 break; |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
292 } |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
293 } |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
294 else |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
295 { |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
296 retval[i] = s[j]; |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
297 } |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
298 |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
299 i++; |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
300 j++; |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
301 } |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
302 |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
303 retval.resize (i); |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
304 |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
305 return retval; |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
306 } |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
307 |
14024
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
308 static void |
22333
2758af148ced
move base_list and regexp classes to octave namespace
John W. Eaton <jwe@octave.org>
parents:
22323
diff
changeset
|
309 parse_options (octave::regexp::opts& options, const octave_value_list& args, |
14024
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
310 const std::string& who, int skip, bool& extra_args) |
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
311 { |
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
312 extra_args = false; |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
313 |
20819
f428cbe7576f
eliminate unnecessary uses of nargin
John W. Eaton <jwe@octave.org>
parents:
20801
diff
changeset
|
314 for (int i = skip; i < args.length (); i++) |
5582 | 315 { |
19403
03067dab10ca
Use stricter input validation when looking for a string as input (bug #42651).
Rik <rik@octave.org>
parents:
17861
diff
changeset
|
316 std::string str; |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
317 |
20700
68e3a747ca02
rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents:
20581
diff
changeset
|
318 str = args(i).xstring_value ("%s: optional arguments must be strings", who.c_str ()); |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
319 |
5582 | 320 std::transform (str.begin (), str.end (), str.begin (), tolower); |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
321 |
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
322 if (str.find ("once", 0) == 0) |
14024
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
323 options.once (true); |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
324 else if (str.find ("matchcase", 0) == 0) |
14024
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
325 options.case_insensitive (false); |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
326 else if (str.find ("ignorecase", 0) == 0) |
14024
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
327 options.case_insensitive (true); |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
328 else if (str.find ("dotall", 0) == 0) |
14024
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
329 options.dotexceptnewline (false); |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
330 else if (str.find ("stringanchors", 0) == 0) |
14024
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
331 options.lineanchors (false); |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
332 else if (str.find ("literalspacing", 0) == 0) |
14024
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
333 options.freespacing (false); |
14536
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
334 else if (str.find ("noemptymatch", 0) == 0) |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
335 options.emptymatch (false); |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
336 else if (str.find ("dotexceptnewline", 0) == 0) |
14024
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
337 options.dotexceptnewline (true); |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
338 else if (str.find ("lineanchors", 0) == 0) |
14024
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
339 options.lineanchors (true); |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
340 else if (str.find ("freespacing", 0) == 0) |
14024
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
341 options.freespacing (true); |
14536
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
342 else if (str.find ("emptymatch", 0) == 0) |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
343 options.emptymatch (true); |
14024
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
344 else if (str.find ("start", 0) == 0 |
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
345 || str.find ("end", 0) == 0 |
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
346 || str.find ("tokenextents", 0) == 0 |
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
347 || str.find ("match", 0) == 0 |
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
348 || str.find ("tokens", 0) == 0 |
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
349 || str.find ("names", 0) == 0 |
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
350 || str.find ("split", 0) == 0) |
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
351 extra_args = true; |
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
352 else |
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
353 error ("%s: unrecognized option", who.c_str ()); |
5582 | 354 } |
5785 | 355 } |
5582 | 356 |
5785 | 357 static octave_value_list |
23433
c9fab0bc983e
maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
358 octregexp (const octave_value_list& args, int nargout, |
c9fab0bc983e
maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
359 const std::string& who, bool case_insensitive = false) |
5785 | 360 { |
361 octave_value_list retval; | |
14024
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
362 |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
363 int nargin = args.length (); |
14024
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
364 |
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
365 // Make sure we have string, pattern |
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
366 const std::string buffer = args(0).string_value (); |
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
367 |
14543
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
368 std::string pattern = args(1).string_value (); |
20558
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
369 |
22722
e6fac42c8d56
Fix regexp handling of beginning/end word match for double-quoted pattern strings (bug #49451).
Rik <rik@octave.org>
parents:
22599
diff
changeset
|
370 // Rewrite pattern for PCRE |
e6fac42c8d56
Fix regexp handling of beginning/end word match for double-quoted pattern strings (bug #49451).
Rik <rik@octave.org>
parents:
22599
diff
changeset
|
371 pattern = do_regexp_ptn_string_escapes (pattern, args(1).is_sq_string ()); |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
372 |
22333
2758af148ced
move base_list and regexp classes to octave namespace
John W. Eaton <jwe@octave.org>
parents:
22323
diff
changeset
|
373 octave::regexp::opts options; |
14024
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
374 options.case_insensitive (case_insensitive); |
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
375 bool extra_options = false; |
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
376 parse_options (options, args, who, 2, extra_options); |
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
377 |
25342
416856765a55
be more careful with using auto in place of explicit const iterator decls
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
378 const octave::regexp::match_data rx_lst |
22333
2758af148ced
move base_list and regexp classes to octave namespace
John W. Eaton <jwe@octave.org>
parents:
22323
diff
changeset
|
379 = octave::regexp::match (pattern, buffer, options, who); |
14024
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
380 |
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
381 string_vector named_pats = rx_lst.named_patterns (); |
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
382 |
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
383 size_t sz = rx_lst.size (); |
5785 | 384 |
20558
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
385 // Converted the linked list in the correct form for the return values |
12464
dfeea9cae79e
require PCRE to build Octave
John W. Eaton <jwe@octave.org>
parents:
12462
diff
changeset
|
386 |
23019
cb09392b5b1c
Return struct array for 'names' option of regexp (bug #49659).
Rik <rik@octave.org>
parents:
22862
diff
changeset
|
387 octave_map nmap (dim_vector ((sz == 0 ? 0 : 1), sz), named_pats); |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
388 |
20558
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
389 retval.resize (7); |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
390 |
23019
cb09392b5b1c
Return struct array for 'names' option of regexp (bug #49659).
Rik <rik@octave.org>
parents:
22862
diff
changeset
|
391 if (sz != 0) |
20558
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
392 { |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
393 for (int j = 0; j < named_pats.numel (); j++) |
7893
eb9ccb44ea41
make regexp(...,'once') matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
7520
diff
changeset
|
394 { |
23019
cb09392b5b1c
Return struct array for 'names' option of regexp (bug #49659).
Rik <rik@octave.org>
parents:
22862
diff
changeset
|
395 Cell ctmp (dim_vector (1, sz)); |
cb09392b5b1c
Return struct array for 'names' option of regexp (bug #49659).
Rik <rik@octave.org>
parents:
22862
diff
changeset
|
396 octave_idx_type i = 0; |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
397 |
22862
e365e87371a3
maint: Use C++ range feature to simplify some for loops in libinterp/corefcn.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
398 for (const auto& match_data : rx_lst) |
13310
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
399 { |
22862
e365e87371a3
maint: Use C++ range feature to simplify some for loops in libinterp/corefcn.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
400 string_vector named_tokens = match_data.named_tokens (); |
14024
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
401 |
23019
cb09392b5b1c
Return struct array for 'names' option of regexp (bug #49659).
Rik <rik@octave.org>
parents:
22862
diff
changeset
|
402 ctmp(i++) = named_tokens(j); |
13310
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
403 } |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
404 |
23019
cb09392b5b1c
Return struct array for 'names' option of regexp (bug #49659).
Rik <rik@octave.org>
parents:
22862
diff
changeset
|
405 nmap.assign (named_pats(j), ctmp); |
20558
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
406 } |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
407 } |
23019
cb09392b5b1c
Return struct array for 'names' option of regexp (bug #49659).
Rik <rik@octave.org>
parents:
22862
diff
changeset
|
408 retval(5) = nmap; |
20558
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
409 |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
410 if (options.once ()) |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
411 { |
25337
3ff9192b676e
use auto keyword to declare iterator variables where possible
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
412 auto p = rx_lst.begin (); |
20558
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
413 |
23450
855122b993da
maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents:
23433
diff
changeset
|
414 retval(4) = (sz ? p->tokens () : Cell ()); |
855122b993da
maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents:
23433
diff
changeset
|
415 retval(3) = (sz ? p->match_string () : ""); |
855122b993da
maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents:
23433
diff
changeset
|
416 retval(2) = (sz ? p->token_extents () : Matrix ()); |
20558
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
417 |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
418 if (sz) |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
419 { |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
420 double start = p->start (); |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
421 double end = p->end (); |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
422 |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
423 Cell split (dim_vector (1, 2)); |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
424 split(0) = buffer.substr (0, start-1); |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
425 split(1) = buffer.substr (end); |
5785 | 426 |
14024
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
427 retval(6) = split; |
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
428 retval(1) = end; |
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
429 retval(0) = start; |
7893
eb9ccb44ea41
make regexp(...,'once') matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
7520
diff
changeset
|
430 } |
20558
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
431 else |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
432 { |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
433 retval(6) = buffer; |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
434 retval(1) = Matrix (); |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
435 retval(0) = Matrix (); |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
436 } |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
437 } |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
438 else |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
439 { |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
440 Cell tokens (dim_vector (1, sz)); |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
441 Cell match_string (dim_vector (1, sz)); |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
442 Cell token_extents (dim_vector (1, sz)); |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
443 NDArray end (dim_vector (1, sz)); |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
444 NDArray start (dim_vector (1, sz)); |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
445 Cell split (dim_vector (1, sz+1)); |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
446 size_t sp_start = 0; |
14024
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
447 |
23019
cb09392b5b1c
Return struct array for 'names' option of regexp (bug #49659).
Rik <rik@octave.org>
parents:
22862
diff
changeset
|
448 octave_idx_type i = 0; |
22862
e365e87371a3
maint: Use C++ range feature to simplify some for loops in libinterp/corefcn.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
449 for (const auto& match_data : rx_lst) |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
450 { |
22862
e365e87371a3
maint: Use C++ range feature to simplify some for loops in libinterp/corefcn.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
451 double s = match_data.start (); |
e365e87371a3
maint: Use C++ range feature to simplify some for loops in libinterp/corefcn.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
452 double e = match_data.end (); |
5582 | 453 |
22862
e365e87371a3
maint: Use C++ range feature to simplify some for loops in libinterp/corefcn.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
454 string_vector tmp = match_data.tokens (); |
20558
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
455 tokens(i) = Cell (dim_vector (1, tmp.numel ()), tmp); |
22862
e365e87371a3
maint: Use C++ range feature to simplify some for loops in libinterp/corefcn.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
456 match_string(i) = match_data.match_string (); |
e365e87371a3
maint: Use C++ range feature to simplify some for loops in libinterp/corefcn.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
457 token_extents(i) = match_data.token_extents (); |
20558
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
458 end(i) = e; |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
459 start(i) = s; |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
460 split(i) = buffer.substr (sp_start, s-sp_start-1); |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
461 sp_start = e; |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
462 i++; |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
463 } |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
464 |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
465 split(i) = buffer.substr (sp_start); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11572
diff
changeset
|
466 |
20558
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
467 retval(6) = split; |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
468 retval(4) = tokens; |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
469 retval(3) = match_string; |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
470 retval(2) = token_extents; |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
471 retval(1) = end; |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
472 retval(0) = start; |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
473 } |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
474 |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
475 // Alter the order of the output arguments |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
476 |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
477 if (extra_options) |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
478 { |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
479 int n = 0; |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
480 octave_value_list new_retval; |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
481 new_retval.resize (nargout); |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
482 |
26476
54ad1294ed70
regexp.cc: Fix static analyzer detected issues (bug #55347).
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
483 bool arg_used[7] {}; |
20558
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
484 |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
485 for (int j = 2; j < nargin; j++) |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
486 { |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
487 int k = 0; |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
488 std::string str = args(j).string_value (); |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
489 std::transform (str.begin (), str.end (), str.begin (), tolower); |
5582 | 490 |
20558
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
491 if (str.find ("once", 0) == 0 |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
492 || str.find ("stringanchors", 0) == 0 |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
493 || str.find ("lineanchors", 0) == 0 |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
494 || str.find ("matchcase", 0) == 0 |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
495 || str.find ("ignorecase", 0) == 0 |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
496 || str.find ("dotall", 0) == 0 |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
497 || str.find ("dotexceptnewline", 0) == 0 |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
498 || str.find ("literalspacing", 0) == 0 |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
499 || str.find ("freespacing", 0) == 0 |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
500 || str.find ("noemptymatch", 0) == 0 |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
501 || str.find ("emptymatch", 0) == 0) |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
502 continue; |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
503 else if (str.find ("start", 0) == 0) |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
504 k = 0; |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
505 else if (str.find ("end", 0) == 0) |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
506 k = 1; |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
507 else if (str.find ("tokenextents", 0) == 0) |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
508 k = 2; |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
509 else if (str.find ("match", 0) == 0) |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
510 k = 3; |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
511 else if (str.find ("tokens", 0) == 0) |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
512 k = 4; |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
513 else if (str.find ("names", 0) == 0) |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
514 k = 5; |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
515 else if (str.find ("split", 0) == 0) |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
516 k = 6; |
5582 | 517 |
20558
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
518 new_retval(n++) = retval(k); |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
519 arg_used[k] = true; |
5582 | 520 |
20558
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
521 if (n == nargout) |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
522 break; |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
523 } |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
524 |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
525 // Fill in the rest of the arguments |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
526 if (n < nargout) |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
527 { |
23769
fdce2b73f5ce
regexp.cc: Correctly size temporary buffer to avoid segfault when re-arranging outputs.
Rik <rik@octave.org>
parents:
23219
diff
changeset
|
528 for (int j = 0; j < 7; j++) |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
529 { |
20558
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
530 if (! arg_used[j]) |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
531 new_retval(n++) = retval(j); |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
532 } |
20558
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
533 } |
5582 | 534 |
20558
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
535 retval = new_retval; |
5582 | 536 } |
537 | |
538 return retval; | |
539 } | |
540 | |
6361 | 541 static octave_value_list |
23433
c9fab0bc983e
maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
542 octcellregexp (const octave_value_list& args, int nargout, |
c9fab0bc983e
maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
543 const std::string& who, bool case_insensitive = false) |
6361 | 544 { |
545 octave_value_list retval; | |
546 | |
23576
00e518162fda
maint: Deprecate is_cell and replace with iscell.
Rik <rik@octave.org>
parents:
23573
diff
changeset
|
547 if (args(0).iscell ()) |
6361 | 548 { |
549 OCTAVE_LOCAL_BUFFER (Cell, newretval, nargout); | |
550 octave_value_list new_args = args; | |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
551 Cell cellstr = args(0).cell_value (); |
23576
00e518162fda
maint: Deprecate is_cell and replace with iscell.
Rik <rik@octave.org>
parents:
23573
diff
changeset
|
552 if (args(1).iscell ()) |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
553 { |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
554 Cell cellpat = args(1).cell_value (); |
6361 | 555 |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
556 if (cellpat.numel () == 1) |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
557 { |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
558 for (int j = 0; j < nargout; j++) |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
559 newretval[j].resize (cellstr.dims ()); |
6361 | 560 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
561 new_args(1) = cellpat(0); |
6361 | 562 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
563 for (octave_idx_type i = 0; i < cellstr.numel (); i++) |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
564 { |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
565 new_args(0) = cellstr(i); |
14024
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
566 octave_value_list tmp = octregexp (new_args, nargout, who, |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
567 case_insensitive); |
6361 | 568 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
569 for (int j = 0; j < nargout; j++) |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
570 newretval[j](i) = tmp(j); |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
571 } |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
572 } |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
573 else if (cellstr.numel () == 1) |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
574 { |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
575 for (int j = 0; j < nargout; j++) |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
576 newretval[j].resize (cellpat.dims ()); |
6361 | 577 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
578 new_args(0) = cellstr(0); |
6361 | 579 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
580 for (octave_idx_type i = 0; i < cellpat.numel (); i++) |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
581 { |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
582 new_args(1) = cellpat(i); |
14024
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
583 octave_value_list tmp = octregexp (new_args, nargout, who, |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
584 case_insensitive); |
6361 | 585 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
586 for (int j = 0; j < nargout; j++) |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
587 newretval[j](i) = tmp(j); |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
588 } |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
589 } |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
590 else if (cellstr.numel () == cellpat.numel ()) |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
591 { |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
592 if (cellstr.dims () != cellpat.dims ()) |
14024
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
593 error ("%s: inconsistent cell array dimensions", who.c_str ()); |
21055
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
594 |
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
595 for (int j = 0; j < nargout; j++) |
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
596 newretval[j].resize (cellstr.dims ()); |
6361 | 597 |
21055
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
598 for (octave_idx_type i = 0; i < cellstr.numel (); i++) |
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
599 { |
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
600 new_args(0) = cellstr(i); |
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
601 new_args(1) = cellpat(i); |
6361 | 602 |
21055
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
603 octave_value_list tmp = octregexp (new_args, nargout, who, |
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
604 case_insensitive); |
6361 | 605 |
21055
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
606 for (int j = 0; j < nargout; j++) |
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
607 newretval[j](i) = tmp(j); |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
608 } |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
609 } |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
610 else |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
611 error ("regexp: cell array arguments must be scalar or equal size"); |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
612 } |
6361 | 613 else |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
614 { |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
615 for (int j = 0; j < nargout; j++) |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
616 newretval[j].resize (cellstr.dims ()); |
6361 | 617 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
618 for (octave_idx_type i = 0; i < cellstr.numel (); i++) |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
619 { |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
620 new_args(0) = cellstr(i); |
14024
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
621 octave_value_list tmp = octregexp (new_args, nargout, who, |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
622 case_insensitive); |
6361 | 623 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
624 for (int j = 0; j < nargout; j++) |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
625 newretval[j](i) = tmp(j); |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
626 } |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
627 } |
6361 | 628 |
20558
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
629 for (int j = 0; j < nargout; j++) |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
630 retval(j) = octave_value (newretval[j]); |
6361 | 631 } |
23576
00e518162fda
maint: Deprecate is_cell and replace with iscell.
Rik <rik@octave.org>
parents:
23573
diff
changeset
|
632 else if (args(1).iscell ()) |
6361 | 633 { |
634 OCTAVE_LOCAL_BUFFER (Cell, newretval, nargout); | |
635 octave_value_list new_args = args; | |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
636 Cell cellpat = args(1).cell_value (); |
6361 | 637 |
638 for (int j = 0; j < nargout; j++) | |
14854
5ae9f0f77635
maint: Use Octave coding conventions for coddling parenthis is DLD-FUNCTIONS directory
Rik <octave@nomad.inbox5.com>
parents:
14846
diff
changeset
|
639 newretval[j].resize (cellpat.dims ()); |
6361 | 640 |
641 for (octave_idx_type i = 0; i < cellpat.numel (); i++) | |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
642 { |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
643 new_args(1) = cellpat(i); |
14024
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
644 octave_value_list tmp = octregexp (new_args, nargout, who, |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
645 case_insensitive); |
6361 | 646 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
647 for (int j = 0; j < nargout; j++) |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
648 newretval[j](i) = tmp(j); |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
649 } |
6361 | 650 |
20558
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
651 for (int j = 0; j < nargout; j++) |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
652 retval(j) = octave_value (newretval[j]); |
6361 | 653 } |
654 else | |
14024
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
655 retval = octregexp (args, nargout, who, case_insensitive); |
6361 | 656 |
657 return retval; | |
658 | |
659 } | |
660 | |
15039
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14854
diff
changeset
|
661 DEFUN (regexp, args, nargout, |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
662 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
663 @deftypefn {} {[@var{s}, @var{e}, @var{te}, @var{m}, @var{t}, @var{nm}, @var{sp}] =} regexp (@var{str}, @var{pat}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
664 @deftypefnx {} {[@dots{}] =} regexp (@var{str}, @var{pat}, "@var{opt1}", @dots{}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
665 Regular expression string matching. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
666 |
27537
7dc31256c5e4
Document that regexp* functions need UTF-8 encoded input (bug #35910).
Markus Mützel <markus.muetzel@gmx.de>
parents:
27278
diff
changeset
|
667 Search for @var{pat} in UTF-8 encoded @var{str} and return the positions and |
7dc31256c5e4
Document that regexp* functions need UTF-8 encoded input (bug #35910).
Markus Mützel <markus.muetzel@gmx.de>
parents:
27278
diff
changeset
|
668 substrings of any matches, or empty values if there are none. |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
669 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
670 The matched pattern @var{pat} can include any of the standard regex |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
671 operators, including: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
672 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
673 @table @code |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
674 @item . |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
675 Match any character |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
676 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
677 @item * + ? @{@} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
678 Repetition operators, representing |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
679 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
680 @table @code |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
681 @item * |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
682 Match zero or more times |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
683 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
684 @item + |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
685 Match one or more times |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
686 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
687 @item ? |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
688 Match zero or one times |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
689 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
690 @item @{@var{n}@} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
691 Match exactly @var{n} times |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
692 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
693 @item @{@var{n},@} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
694 Match @var{n} or more times |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
695 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
696 @item @{@var{m},@var{n}@} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
697 Match between @var{m} and @var{n} times |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
698 @end table |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
699 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
700 @item [@dots{}] [^@dots{}] |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
701 |
22299
9fc91bb2aec3
doc: grammarcheck documentation for 4.2 release.
Rik <rik@octave.org>
parents:
22197
diff
changeset
|
702 List operators. The pattern will match any character listed between |
9fc91bb2aec3
doc: grammarcheck documentation for 4.2 release.
Rik <rik@octave.org>
parents:
22197
diff
changeset
|
703 @qcode{"["} and @qcode{"]"}. If the first character is @qcode{"^"} then the |
9fc91bb2aec3
doc: grammarcheck documentation for 4.2 release.
Rik <rik@octave.org>
parents:
22197
diff
changeset
|
704 pattern is inverted and any character except those listed between brackets |
9fc91bb2aec3
doc: grammarcheck documentation for 4.2 release.
Rik <rik@octave.org>
parents:
22197
diff
changeset
|
705 will match. |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
706 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
707 Escape sequences defined below can also be used inside list operators. For |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
708 example, a template for a floating point number might be @code{[-+.\d]+}. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
709 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
710 @item () (?:) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
711 Grouping operator. The first form, parentheses only, also creates a token. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
712 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
713 @item | |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
714 Alternation operator. Match one of a choice of regular expressions. The |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
715 alternatives must be delimited by the grouping operator @code{()} above. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
716 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
717 @item ^ $ |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
718 Anchoring operators. Requires pattern to occur at the start (@code{^}) or |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
719 end (@code{$}) of the string. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
720 @end table |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
721 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
722 In addition, the following escaped characters have special meaning. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
723 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
724 @table @code |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
725 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
726 @item \d |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
727 Match any digit |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
728 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
729 @item \D |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
730 Match any non-digit |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
731 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
732 @item \s |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
733 Match any whitespace character |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
734 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
735 @item \S |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
736 Match any non-whitespace character |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
737 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
738 @item \w |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
739 Match any word character |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
740 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
741 @item \W |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
742 Match any non-word character |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
743 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
744 @item \< |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
745 Match the beginning of a word |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
746 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
747 @item \> |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
748 Match the end of a word |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
749 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
750 @item \B |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
751 Match within a word |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
752 @end table |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
753 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
754 Implementation Note: For compatibility with @sc{matlab}, escape sequences |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
755 in @var{pat} (e.g., @qcode{"@xbackslashchar{}n"} => newline) are expanded |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
756 even when @var{pat} has been defined with single quotes. To disable |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
757 expansion use a second backslash before the escape sequence (e.g., |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
758 "@xbackslashchar{}@xbackslashchar{}n") or use the @code{regexptranslate} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
759 function. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
760 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
761 The outputs of @code{regexp} default to the order given below |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
762 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
763 @table @var |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
764 @item s |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
765 The start indices of each matching substring |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
766 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
767 @item e |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
768 The end indices of each matching substring |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
769 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
770 @item te |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
771 The extents of each matched token surrounded by @code{(@dots{})} in |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
772 @var{pat} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
773 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
774 @item m |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
775 A cell array of the text of each match |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
776 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
777 @item t |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
778 A cell array of the text of each token matched |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
779 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
780 @item nm |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
781 A structure containing the text of each matched named token, with the name |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
782 being used as the fieldname. A named token is denoted by |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
783 @code{(?<name>@dots{})}. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
784 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
785 @item sp |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
786 A cell array of the text not returned by match, i.e., what remains if you |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
787 split the string based on @var{pat}. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
788 @end table |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
789 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
790 Particular output arguments, or the order of the output arguments, can be |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
791 selected by additional @var{opt} arguments. These are strings and the |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
792 correspondence between the output arguments and the optional argument |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
793 are |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
794 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
795 @multitable @columnfractions 0.2 0.3 0.3 0.2 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
796 @item @tab @qcode{'start'} @tab @var{s} @tab |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
797 @item @tab @qcode{'end'} @tab @var{e} @tab |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
798 @item @tab @qcode{'tokenExtents'} @tab @var{te} @tab |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
799 @item @tab @qcode{'match'} @tab @var{m} @tab |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
800 @item @tab @qcode{'tokens'} @tab @var{t} @tab |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
801 @item @tab @qcode{'names'} @tab @var{nm} @tab |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
802 @item @tab @qcode{'split'} @tab @var{sp} @tab |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
803 @end multitable |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
804 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
805 Additional arguments are summarized below. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
806 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
807 @table @samp |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
808 @item once |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
809 Return only the first occurrence of the pattern. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
810 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
811 @item matchcase |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
812 Make the matching case sensitive. (default) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
813 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
814 Alternatively, use (?-i) in the pattern. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
815 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
816 @item ignorecase |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
817 Ignore case when matching the pattern to the string. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
818 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
819 Alternatively, use (?i) in the pattern. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
820 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
821 @item stringanchors |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
822 Match the anchor characters at the beginning and end of the string. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
823 (default) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
824 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
825 Alternatively, use (?-m) in the pattern. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
826 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
827 @item lineanchors |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
828 Match the anchor characters at the beginning and end of the line. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
829 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
830 Alternatively, use (?m) in the pattern. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
831 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
832 @item dotall |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
833 The pattern @code{.} matches all characters including the newline character. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
834 (default) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
835 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
836 Alternatively, use (?s) in the pattern. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
837 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
838 @item dotexceptnewline |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
839 The pattern @code{.} matches all characters except the newline character. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
840 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
841 Alternatively, use (?-s) in the pattern. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
842 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
843 @item literalspacing |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
844 All characters in the pattern, including whitespace, are significant and are |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
845 used in pattern matching. (default) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
846 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
847 Alternatively, use (?-x) in the pattern. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
848 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
849 @item freespacing |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
850 The pattern may include arbitrary whitespace and also comments beginning |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
851 with the character @samp{#}. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
852 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
853 Alternatively, use (?x) in the pattern. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
854 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
855 @item noemptymatch |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
856 Zero-length matches are not returned. (default) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
857 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
858 @item emptymatch |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
859 Return zero-length matches. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
860 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
861 @code{regexp ('a', 'b*', 'emptymatch')} returns @code{[1 2]} because there |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
862 are zero or more @qcode{'b'} characters at positions 1 and end-of-string. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
863 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
864 @end table |
24986
0b9e7fcaab91
doc: grammarcheck docstrings in C++ files ahead of 4.4 release.
Rik <rik@octave.org>
parents:
24751
diff
changeset
|
865 |
23816
d396866fa7d8
Add documentation about PCRE library regexp stack overflow (bug #51589).
Daniel J Sebald <daniel.sebald@ieee.org>
parents:
23769
diff
changeset
|
866 Stack Limitation Note: Pattern searches are done with a recursive function |
d396866fa7d8
Add documentation about PCRE library regexp stack overflow (bug #51589).
Daniel J Sebald <daniel.sebald@ieee.org>
parents:
23769
diff
changeset
|
867 which can overflow the program stack when there are a high number of matches. |
d396866fa7d8
Add documentation about PCRE library regexp stack overflow (bug #51589).
Daniel J Sebald <daniel.sebald@ieee.org>
parents:
23769
diff
changeset
|
868 For example, |
d396866fa7d8
Add documentation about PCRE library regexp stack overflow (bug #51589).
Daniel J Sebald <daniel.sebald@ieee.org>
parents:
23769
diff
changeset
|
869 |
d396866fa7d8
Add documentation about PCRE library regexp stack overflow (bug #51589).
Daniel J Sebald <daniel.sebald@ieee.org>
parents:
23769
diff
changeset
|
870 @example |
d396866fa7d8
Add documentation about PCRE library regexp stack overflow (bug #51589).
Daniel J Sebald <daniel.sebald@ieee.org>
parents:
23769
diff
changeset
|
871 @code{regexp (repmat ('a', 1, 1e5), '(a)+')} |
d396866fa7d8
Add documentation about PCRE library regexp stack overflow (bug #51589).
Daniel J Sebald <daniel.sebald@ieee.org>
parents:
23769
diff
changeset
|
872 @end example |
d396866fa7d8
Add documentation about PCRE library regexp stack overflow (bug #51589).
Daniel J Sebald <daniel.sebald@ieee.org>
parents:
23769
diff
changeset
|
873 |
24986
0b9e7fcaab91
doc: grammarcheck docstrings in C++ files ahead of 4.4 release.
Rik <rik@octave.org>
parents:
24751
diff
changeset
|
874 @noindent |
23816
d396866fa7d8
Add documentation about PCRE library regexp stack overflow (bug #51589).
Daniel J Sebald <daniel.sebald@ieee.org>
parents:
23769
diff
changeset
|
875 may lead to a segfault. As an alternative, consider constructing pattern |
d396866fa7d8
Add documentation about PCRE library regexp stack overflow (bug #51589).
Daniel J Sebald <daniel.sebald@ieee.org>
parents:
23769
diff
changeset
|
876 searches that reduce the number of matches (e.g., by creatively using set |
d396866fa7d8
Add documentation about PCRE library regexp stack overflow (bug #51589).
Daniel J Sebald <daniel.sebald@ieee.org>
parents:
23769
diff
changeset
|
877 complement), and then further processing the return variables (now reduced in |
d396866fa7d8
Add documentation about PCRE library regexp stack overflow (bug #51589).
Daniel J Sebald <daniel.sebald@ieee.org>
parents:
23769
diff
changeset
|
878 size) with successive @code{regexp} searches. |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
879 @seealso{regexpi, strfind, regexprep} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
880 @end deftypefn */) |
5582 | 881 { |
20821
b169da150702
Eliminate unnecessary uses of nargin.
Rik <rik@octave.org>
parents:
20819
diff
changeset
|
882 if (args.length () < 2) |
b169da150702
Eliminate unnecessary uses of nargin.
Rik <rik@octave.org>
parents:
20819
diff
changeset
|
883 print_usage (); |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
884 |
20821
b169da150702
Eliminate unnecessary uses of nargin.
Rik <rik@octave.org>
parents:
20819
diff
changeset
|
885 octave_value_list retval; |
20801
a542a9bf177e
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
886 |
23576
00e518162fda
maint: Deprecate is_cell and replace with iscell.
Rik <rik@octave.org>
parents:
23573
diff
changeset
|
887 if (args(0).iscell () || args(1).iscell ()) |
23450
855122b993da
maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents:
23433
diff
changeset
|
888 retval = (octcellregexp (args, (nargout > 0 ? nargout : 1), "regexp")); |
6361 | 889 else |
14024
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
890 retval = octregexp (args, nargout, "regexp"); |
6361 | 891 |
892 return retval; | |
5582 | 893 } |
894 | |
895 /* | |
8140
cdd05e46f6c9
Increase pcre's match_limit for difficult regexps
Thomas Weber <thomas.weber.mail@gmail.com>
parents:
8093
diff
changeset
|
896 ## PCRE_ERROR_MATCHLIMIT test |
cdd05e46f6c9
Increase pcre's match_limit for difficult regexps
Thomas Weber <thomas.weber.mail@gmail.com>
parents:
8093
diff
changeset
|
897 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
898 %! s = sprintf ('\t4\n0000\t-0.00\t-0.0000\t4\t-0.00\t-0.0000\t4\n0000\t-0.00\t-0.0000\t0\t-0.00\t-'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
899 %! ws = warning ("query"); |
8140
cdd05e46f6c9
Increase pcre's match_limit for difficult regexps
Thomas Weber <thomas.weber.mail@gmail.com>
parents:
8093
diff
changeset
|
900 %! unwind_protect |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
901 %! warning ("off"); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
902 %! regexp (s, '(\s*-*\d+[.]*\d*\s*)+\n'); |
8140
cdd05e46f6c9
Increase pcre's match_limit for difficult regexps
Thomas Weber <thomas.weber.mail@gmail.com>
parents:
8093
diff
changeset
|
903 %! unwind_protect_cleanup |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
904 %! warning (ws); |
8140
cdd05e46f6c9
Increase pcre's match_limit for difficult regexps
Thomas Weber <thomas.weber.mail@gmail.com>
parents:
8093
diff
changeset
|
905 %! end_unwind_protect |
cdd05e46f6c9
Increase pcre's match_limit for difficult regexps
Thomas Weber <thomas.weber.mail@gmail.com>
parents:
8093
diff
changeset
|
906 |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
907 ## segfault test |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
908 %!assert (regexp ("abcde", "."), [1,2,3,4,5]) |
13759
c4b6ea833fa5
Fix infinite loop with null patterns in regexp (Bug #34101, Bug #33258)
Rik <octave@nomad.inbox5.com>
parents:
13311
diff
changeset
|
909 ## Infinite loop test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
910 %!assert (isempty (regexp ("abcde", ""))) |
5582 | 911 |
912 ## Check that anchoring of pattern works correctly | |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
913 %!assert (regexp ('abcabc', '^abc'), 1) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
914 %!assert (regexp ('abcabc', 'abc$'), 4) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
915 %!assert (regexp ('abcabc', '^abc$'), zeros (1,0)) |
5582 | 916 |
917 %!test | |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
918 %! [s, e, te, m, t] = regexp (' No Match ', 'f(.*)uck'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
919 %! assert (s, zeros (1,0)); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
920 %! assert (e, zeros (1,0)); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
921 %! assert (te, cell (1,0)); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
922 %! assert (m, cell (1,0)); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
923 %! assert (t, cell (1,0)); |
5582 | 924 |
925 %!test | |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
926 %! [s, e, te, m, t] = regexp (' FiRetrUck ', 'f(.*)uck'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
927 %! assert (s, zeros (1,0)); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
928 %! assert (e, zeros (1,0)); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
929 %! assert (te, cell (1,0)); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
930 %! assert (m, cell (1,0)); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
931 %! assert (t, cell (1,0)); |
5582 | 932 |
933 %!test | |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
934 %! [s, e, te, m, t] = regexp (' firetruck ', 'f(.*)uck'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
935 %! assert (s, 2); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
936 %! assert (e, 10); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
937 %! assert (te{1}, [3, 7]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
938 %! assert (m{1}, 'firetruck'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
939 %! assert (t{1}{1}, 'iretr'); |
5582 | 940 |
941 %!test | |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
942 %! [s, e, te, m, t] = regexp ('short test string', '\w*r\w*'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
943 %! assert (s, [1, 12]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
944 %! assert (e, [5, 17]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
945 %! assert (size (te), [1, 2]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
946 %! assert (isempty (te{1})); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
947 %! assert (isempty (te{2})); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
948 %! assert (m{1}, 'short'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
949 %! assert (m{2}, 'string'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
950 %! assert (size (t), [1, 2]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
951 %! assert (isempty (t{1})); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
952 %! assert (isempty (t{2})); |
5582 | 953 |
954 %!test | |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
955 %! [s, e, te, m, t] = regexp ('short test string', '\w*r\w*', 'once'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
956 %! assert (s, 1); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
957 %! assert (e, 5); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
958 %! assert (isempty (te)); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
959 %! assert (m, 'short'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
960 %! assert (isempty (t)); |
5582 | 961 |
962 %!test | |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
963 %! [m, te, e, s, t] = regexp ('short test string', '\w*r\w*', 'once', 'match', 'tokenExtents', 'end', 'start', 'tokens'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
964 %! assert (s, 1); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
965 %! assert (e, 5); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
966 %! assert (isempty (te)); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
967 %! assert (m, 'short'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
968 %! assert (isempty (t)); |
5582 | 969 |
12462
e4dbfe3019b1
Use PCRE regular expressions throughout Octave.
Rik <octave@nomad.inbox5.com>
parents:
12433
diff
changeset
|
970 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
971 %! [s, e, te, m, t, nm] = regexp ('short test string', '(?<word1>\w*t)\s*(?<word2>\w*t)'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
972 %! assert (s, 1); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
973 %! assert (e, 10); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
974 %! assert (size (te), [1, 1]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
975 %! assert (te{1}, [1,5; 7,10]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
976 %! assert (m{1}, 'short test'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
977 %! assert (size (t), [1, 1]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
978 %! assert (t{1}{1}, 'short'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
979 %! assert (t{1}{2}, 'test'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
980 %! assert (size (nm), [1, 1]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
981 %! assert (! isempty (fieldnames (nm))); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
982 %! assert (sort (fieldnames (nm)), {'word1';'word2'}); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
983 %! assert (nm.word1, 'short'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
984 %! assert (nm.word2, 'test'); |
5582 | 985 |
12462
e4dbfe3019b1
Use PCRE regular expressions throughout Octave.
Rik <octave@nomad.inbox5.com>
parents:
12433
diff
changeset
|
986 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
987 %! [nm, m, te, e, s, t] = regexp ('short test string', '(?<word1>\w*t)\s*(?<word2>\w*t)', 'names', 'match', 'tokenExtents', 'end', 'start', 'tokens'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
988 %! assert (s, 1); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
989 %! assert (e, 10); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
990 %! assert (size (te), [1, 1]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
991 %! assert (te{1}, [1,5; 7,10]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
992 %! assert (m{1}, 'short test'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
993 %! assert (size (t), [1, 1]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
994 %! assert (t{1}{1}, 'short'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
995 %! assert (t{1}{2}, 'test'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
996 %! assert (size (nm), [1, 1]); |
20955
77f5591878bf
maint: Use '! expr' rather than '!expr' to conform to coding guidelines.
Rik <rik@octave.org>
parents:
20940
diff
changeset
|
997 %! assert (! isempty (fieldnames (nm))); |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
998 %! assert (sort (fieldnames (nm)), {'word1';'word2'}); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
999 %! assert (nm.word1, 'short'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1000 %! assert (nm.word2, 'test'); |
5619 | 1001 |
12462
e4dbfe3019b1
Use PCRE regular expressions throughout Octave.
Rik <octave@nomad.inbox5.com>
parents:
12433
diff
changeset
|
1002 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1003 %! [t, nm] = regexp ("John Davis\nRogers, James", '(?<first>\w+)\s+(?<last>\w+)|(?<last>\w+),\s+(?<first>\w+)', 'tokens', 'names'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1004 %! assert (size (t), [1, 2]); |
23019
cb09392b5b1c
Return struct array for 'names' option of regexp (bug #49659).
Rik <rik@octave.org>
parents:
22862
diff
changeset
|
1005 %! assert (t{1}{1}, "John"); |
cb09392b5b1c
Return struct array for 'names' option of regexp (bug #49659).
Rik <rik@octave.org>
parents:
22862
diff
changeset
|
1006 %! assert (t{1}{2}, "Davis"); |
cb09392b5b1c
Return struct array for 'names' option of regexp (bug #49659).
Rik <rik@octave.org>
parents:
22862
diff
changeset
|
1007 %! assert (t{2}{1}, "Rogers"); |
cb09392b5b1c
Return struct array for 'names' option of regexp (bug #49659).
Rik <rik@octave.org>
parents:
22862
diff
changeset
|
1008 %! assert (t{2}{2}, "James"); |
cb09392b5b1c
Return struct array for 'names' option of regexp (bug #49659).
Rik <rik@octave.org>
parents:
22862
diff
changeset
|
1009 %! assert (size (nm), [1, 2]); |
cb09392b5b1c
Return struct array for 'names' option of regexp (bug #49659).
Rik <rik@octave.org>
parents:
22862
diff
changeset
|
1010 %! assert (nm(1).first, "John"); |
cb09392b5b1c
Return struct array for 'names' option of regexp (bug #49659).
Rik <rik@octave.org>
parents:
22862
diff
changeset
|
1011 %! assert (nm(1).last, "Davis"); |
cb09392b5b1c
Return struct array for 'names' option of regexp (bug #49659).
Rik <rik@octave.org>
parents:
22862
diff
changeset
|
1012 %! assert (nm(2).first, "James"); |
cb09392b5b1c
Return struct array for 'names' option of regexp (bug #49659).
Rik <rik@octave.org>
parents:
22862
diff
changeset
|
1013 %! assert (nm(2).last, "Rogers"); |
5582 | 1014 |
24741
00dfa167c1fe
Fix handling of NULL character in regular expressions for Matlab compatibility.
Rik <rik@octave.org>
parents:
24607
diff
changeset
|
1015 ## Tests for nulls in strings properly matching |
00dfa167c1fe
Fix handling of NULL character in regular expressions for Matlab compatibility.
Rik <rik@octave.org>
parents:
24607
diff
changeset
|
1016 %!test |
00dfa167c1fe
Fix handling of NULL character in regular expressions for Matlab compatibility.
Rik <rik@octave.org>
parents:
24607
diff
changeset
|
1017 %! str = "A\0B\0\0C"; |
00dfa167c1fe
Fix handling of NULL character in regular expressions for Matlab compatibility.
Rik <rik@octave.org>
parents:
24607
diff
changeset
|
1018 %! ptn = '(\0+)'; # also test null in single-quote pattern |
00dfa167c1fe
Fix handling of NULL character in regular expressions for Matlab compatibility.
Rik <rik@octave.org>
parents:
24607
diff
changeset
|
1019 %! M = regexp (str, ptn, "match"); |
00dfa167c1fe
Fix handling of NULL character in regular expressions for Matlab compatibility.
Rik <rik@octave.org>
parents:
24607
diff
changeset
|
1020 %! assert (size (M), [1, 2]); |
00dfa167c1fe
Fix handling of NULL character in regular expressions for Matlab compatibility.
Rik <rik@octave.org>
parents:
24607
diff
changeset
|
1021 %! assert (double (M{1}), [0]); |
00dfa167c1fe
Fix handling of NULL character in regular expressions for Matlab compatibility.
Rik <rik@octave.org>
parents:
24607
diff
changeset
|
1022 %! assert (double (M{2}), [0, 0]); |
00dfa167c1fe
Fix handling of NULL character in regular expressions for Matlab compatibility.
Rik <rik@octave.org>
parents:
24607
diff
changeset
|
1023 |
00dfa167c1fe
Fix handling of NULL character in regular expressions for Matlab compatibility.
Rik <rik@octave.org>
parents:
24607
diff
changeset
|
1024 %!test |
00dfa167c1fe
Fix handling of NULL character in regular expressions for Matlab compatibility.
Rik <rik@octave.org>
parents:
24607
diff
changeset
|
1025 %! str = "A\0B\0\0C"; |
00dfa167c1fe
Fix handling of NULL character in regular expressions for Matlab compatibility.
Rik <rik@octave.org>
parents:
24607
diff
changeset
|
1026 %! ptn = "(\0+)"; # also test null in double-quote pattern |
00dfa167c1fe
Fix handling of NULL character in regular expressions for Matlab compatibility.
Rik <rik@octave.org>
parents:
24607
diff
changeset
|
1027 %! T = regexp (str, ptn, "tokens"); |
00dfa167c1fe
Fix handling of NULL character in regular expressions for Matlab compatibility.
Rik <rik@octave.org>
parents:
24607
diff
changeset
|
1028 %! assert (size (T), [1, 2]); |
00dfa167c1fe
Fix handling of NULL character in regular expressions for Matlab compatibility.
Rik <rik@octave.org>
parents:
24607
diff
changeset
|
1029 %! assert (double (T{1}{1}), [0]); |
00dfa167c1fe
Fix handling of NULL character in regular expressions for Matlab compatibility.
Rik <rik@octave.org>
parents:
24607
diff
changeset
|
1030 %! assert (double (T{2}{1}), [0, 0]); |
00dfa167c1fe
Fix handling of NULL character in regular expressions for Matlab compatibility.
Rik <rik@octave.org>
parents:
24607
diff
changeset
|
1031 |
00dfa167c1fe
Fix handling of NULL character in regular expressions for Matlab compatibility.
Rik <rik@octave.org>
parents:
24607
diff
changeset
|
1032 %!test |
00dfa167c1fe
Fix handling of NULL character in regular expressions for Matlab compatibility.
Rik <rik@octave.org>
parents:
24607
diff
changeset
|
1033 %! str = "A\0B\0\0C"; |
00dfa167c1fe
Fix handling of NULL character in regular expressions for Matlab compatibility.
Rik <rik@octave.org>
parents:
24607
diff
changeset
|
1034 %! ptn = '(?<namedtoken>\0+)'; |
00dfa167c1fe
Fix handling of NULL character in regular expressions for Matlab compatibility.
Rik <rik@octave.org>
parents:
24607
diff
changeset
|
1035 %! NT = regexp (str, ptn, "names"); |
00dfa167c1fe
Fix handling of NULL character in regular expressions for Matlab compatibility.
Rik <rik@octave.org>
parents:
24607
diff
changeset
|
1036 %! assert (size (NT), [1, 2]); |
00dfa167c1fe
Fix handling of NULL character in regular expressions for Matlab compatibility.
Rik <rik@octave.org>
parents:
24607
diff
changeset
|
1037 %! assert (double (NT(1).namedtoken), [0]); |
00dfa167c1fe
Fix handling of NULL character in regular expressions for Matlab compatibility.
Rik <rik@octave.org>
parents:
24607
diff
changeset
|
1038 %! assert (double (NT(2).namedtoken), [0, 0]); |
00dfa167c1fe
Fix handling of NULL character in regular expressions for Matlab compatibility.
Rik <rik@octave.org>
parents:
24607
diff
changeset
|
1039 |
14452
721be41ea988
Stop segfault when using regular expressions with named capture buffers (bug #35683).
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
1040 ## Tests for named tokens |
12462
e4dbfe3019b1
Use PCRE regular expressions throughout Octave.
Rik <octave@nomad.inbox5.com>
parents:
12433
diff
changeset
|
1041 %!test |
17336
b81b9d079515
Use '##' for comments which stand alone on a line.
Rik <rik@octave.org>
parents:
17281
diff
changeset
|
1042 %! ## Parenthesis in named token (ie (int)) causes a problem |
24741
00dfa167c1fe
Fix handling of NULL character in regular expressions for Matlab compatibility.
Rik <rik@octave.org>
parents:
24607
diff
changeset
|
1043 %! assert (regexp ('qwe int asd', ['(?<typestr>(int))'], 'names'), |
00dfa167c1fe
Fix handling of NULL character in regular expressions for Matlab compatibility.
Rik <rik@octave.org>
parents:
24607
diff
changeset
|
1044 %! struct ('typestr', 'int')); |
10518
fcafe0e9bd58
Handle repeated matches in matches returned by pcre
David Bateman <dbateman@free.fr>
parents:
10504
diff
changeset
|
1045 |
23573
1b4f4ec53b4a
use new script to tag fixed bugs in tests
John W. Eaton <jwe@octave.org>
parents:
23572
diff
changeset
|
1046 %!test <*35683> |
22489
93ea313301f9
test: Add bug ids (<#####>) to BIST tests.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
1047 %! ## Mix of named and unnamed tokens can cause segfault |
14452
721be41ea988
Stop segfault when using regular expressions with named capture buffers (bug #35683).
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
1048 %! str = "abcde"; |
721be41ea988
Stop segfault when using regular expressions with named capture buffers (bug #35683).
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
1049 %! ptn = '(?<T1>a)(\w+)(?<T2>d\w+)'; |
721be41ea988
Stop segfault when using regular expressions with named capture buffers (bug #35683).
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
1050 %! tokens = regexp (str, ptn, "names"); |
721be41ea988
Stop segfault when using regular expressions with named capture buffers (bug #35683).
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
1051 %! assert (isstruct (tokens) && numel (tokens) == 1); |
721be41ea988
Stop segfault when using regular expressions with named capture buffers (bug #35683).
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
1052 %! assert (tokens.T1, "a"); |
721be41ea988
Stop segfault when using regular expressions with named capture buffers (bug #35683).
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
1053 %! assert (tokens.T2, "de"); |
721be41ea988
Stop segfault when using regular expressions with named capture buffers (bug #35683).
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
1054 |
24751
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
1055 ## Test options to regexp |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1056 %!assert (regexp ("abc\nabc", '.'), [1:7]) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1057 %!assert (regexp ("abc\nabc", '.', 'dotall'), [1:7]) |
12462
e4dbfe3019b1
Use PCRE regular expressions throughout Octave.
Rik <octave@nomad.inbox5.com>
parents:
12433
diff
changeset
|
1058 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1059 %! assert (regexp ("abc\nabc", '(?s).'), [1:7]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1060 %! assert (regexp ("abc\nabc", '.', 'dotexceptnewline'), [1,2,3,5,6,7]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1061 %! assert (regexp ("abc\nabc", '(?-s).'), [1,2,3,5,6,7]); |
5779 | 1062 |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1063 %!assert (regexp ("caseCaSe", 'case'), 1) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1064 %!assert (regexp ("caseCaSe", 'case', "matchcase"), 1) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1065 %!assert (regexp ("caseCaSe", 'case', "ignorecase"), [1,5]) |
12462
e4dbfe3019b1
Use PCRE regular expressions throughout Octave.
Rik <octave@nomad.inbox5.com>
parents:
12433
diff
changeset
|
1066 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1067 %! assert (regexp ("caseCaSe", '(?-i)case'), 1); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1068 %! assert (regexp ("caseCaSe", '(?i)case'), [1, 5]); |
5779 | 1069 |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1070 %!assert (regexp ("abc\nabc", 'c$'), 7) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1071 %!assert (regexp ("abc\nabc", 'c$', "stringanchors"), 7) |
12462
e4dbfe3019b1
Use PCRE regular expressions throughout Octave.
Rik <octave@nomad.inbox5.com>
parents:
12433
diff
changeset
|
1072 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1073 %! assert (regexp ("abc\nabc", '(?-m)c$'), 7); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1074 %! assert (regexp ("abc\nabc", 'c$',"lineanchors"), [3, 7]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1075 %! assert (regexp ("abc\nabc", '(?m)c$'), [3,7]); |
5779 | 1076 |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1077 %!assert (regexp ("this word", 's w'), 4) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1078 %!assert (regexp ("this word", 's w', 'literalspacing'), 4) |
12462
e4dbfe3019b1
Use PCRE regular expressions throughout Octave.
Rik <octave@nomad.inbox5.com>
parents:
12433
diff
changeset
|
1079 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1080 %! assert (regexp ("this word", '(?-x)s w', 'literalspacing'), 4); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1081 %! assert (regexp ("this word", 's w', 'freespacing'), zeros (1,0)); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1082 %! assert (regexp ("this word", '(?x)s w'), zeros (1,0)); |
5779 | 1083 |
14536
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1084 %!test |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1085 %! [s, e, te, m, t, nm, sp] = regexp ('OCTAVE', '[VOCT]*', 'noemptymatch'); |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1086 %! assert (s, [1 5]); |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1087 %! assert (e, [3 5]); |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1088 %! assert (te, { zeros(0,2), zeros(0,2) }); |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1089 %! assert (m, { "OCT", "V" }); |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1090 %! assert (t, { cell(1,0), cell(1,0) }); |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1091 %! assert (isempty (fieldnames (nm))); |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1092 %! assert (sp, { "", "A", "E" }); |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1093 |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1094 %!test |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1095 %! [s, e, te, m, t, nm, sp] = regexp ('OCTAVE', '([VOCT]*)', 'noemptymatch'); |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1096 %! assert (s, [1 5]); |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1097 %! assert (e, [3 5]); |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1098 %! assert (te, { [1 3], [5 5] }); |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1099 %! assert (m, { "OCT", "V" }); |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1100 %! assert (t, { {"OCT"}, {"V"} }); |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1101 %! assert (isempty (fieldnames (nm))); |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1102 %! assert (sp, { "", "A", "E" }); |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1103 |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1104 %!test |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1105 %! [s, e, te, m, t, nm, sp] = regexp ('OCTAVE', '[VOCT]*', 'emptymatch'); |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1106 %! assert (s, [1 4 5 6 7]); |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1107 %! assert (e, [3 3 5 5 6]); |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1108 %! assert (te, repmat ({zeros(0,2)}, [1, 5])); |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1109 %! assert (m, { "OCT", "", "V", "", "" }); |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1110 %! assert (t, repmat({cell(1,0)}, [1, 5])); |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1111 %! assert (isempty (fieldnames (nm))); |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1112 %! assert (sp, { "", "", "A", "", "E", "" }); |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1113 |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1114 %!test |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1115 %! [s, e, te, m, t, nm, sp] = regexp ('OCTAVE', '([VOCT]*)', 'emptymatch'); |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1116 %! assert (s, [1 4 5 6 7]); |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1117 %! assert (e, [3 3 5 5 6]); |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1118 %! assert (te, { [1 3], [4 3], [5 5], [6 5], [7 6] }); |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1119 %! assert (m, { "OCT", "", "V", "", "" }); |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1120 %! assert (t, { {"OCT"}, {""}, {"V"}, {""}, {""} }); |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1121 %! assert (isempty (fieldnames (nm))); |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1122 %! assert (sp, { "", "", "A", "", "E", "" }); |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1123 |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1124 %!assert (regexp ({'asdfg-dfd';'-dfd-dfd-';'qasfdfdaq'}, '-'), {6;[1,5,9];zeros(1,0)}) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1125 %!assert (regexp ({'asdfg-dfd';'-dfd-dfd-';'qasfdfdaq'}, {'-';'f';'q'}), {6;[3,7];[1,9]}) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1126 %!assert (regexp ('Strings', {'t','s'}), {2, 7}) |
6361 | 1127 |
8093
dcc31f473596
Treat PCRE lookbehind operators in a manner that is approximately correct
David Bateman <dbateman@free.fr>
parents:
8021
diff
changeset
|
1128 ## Test case for lookaround operators |
12462
e4dbfe3019b1
Use PCRE regular expressions throughout Octave.
Rik <octave@nomad.inbox5.com>
parents:
12433
diff
changeset
|
1129 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1130 %! assert (regexp ('Iraq', 'q(?!u)'), 4); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1131 %! assert (regexp ('quit', 'q(?!u)'), zeros (1, 0)); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1132 %! assert (regexp ('quit', 'q(?=u)' , 'match'), {'q'}); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1133 %! assert (regexp ("quit", 'q(?=u+)', 'match'), {'q'}); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1134 %! assert (regexp ("qit", 'q(?=u+)', 'match'), cell (1, 0)); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1135 %! assert (regexp ("qit", 'q(?=u*)', 'match'), {'q'}); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1136 %! assert (regexp ('thingamabob', '(?<=a)b'), 9); |
8093
dcc31f473596
Treat PCRE lookbehind operators in a manner that is approximately correct
David Bateman <dbateman@free.fr>
parents:
8021
diff
changeset
|
1137 |
13310
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
1138 ## Tests for split option. |
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
1139 %!shared str |
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
1140 %! str = "foo bar foo"; |
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
1141 %!test |
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
1142 %! [a, b] = regexp (str, "f..", "match", "split"); |
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
1143 %! assert (a, {"foo", "foo"}); |
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
1144 %! assert (b, {"", " bar ", ""}); |
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
1145 %!test |
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
1146 %! [a, b] = regexp (str, "f..", "match", "split", "once"); |
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
1147 %! assert (a, "foo"); |
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
1148 %! assert (b, {"", " bar foo"}); |
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
1149 %!test |
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
1150 %! [a, b] = regexp (str, "fx.", "match", "split"); |
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
1151 %! assert (a, cell (1, 0)); |
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
1152 %! assert (b, {"foo bar foo"}); |
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
1153 %!test |
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
1154 %! [a, b] = regexp (str, "fx.", "match", "split", "once"); |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1155 %! assert (a, "");; |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1156 %! assert (b, "foo bar foo"); |
13310
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
1157 |
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
1158 %!shared str |
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
1159 %! str = "foo bar"; |
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
1160 %!test |
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
1161 %! [a, b] = regexp (str, "f..", "match", "split"); |
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
1162 %! assert (a, {"foo"}); |
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
1163 %! assert (b, {"", " bar"}); |
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
1164 %!test |
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
1165 %! [a, b] = regexp (str, "b..", "match", "split"); |
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
1166 %! assert (a, {"bar"}); |
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
1167 %! assert (b, {"foo ", ""}); |
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
1168 %!test |
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
1169 %! [a, b] = regexp (str, "x", "match", "split"); |
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
1170 %! assert (a, cell (1, 0)); |
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
1171 %! assert (b, {"foo bar"}); |
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
1172 %!test |
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
1173 %! [a, b] = regexp (str, "[o]+", "match", "split"); |
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
1174 %! assert (a, {"oo"}); |
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
1175 %! assert (b, {"f", " bar"}); |
14543
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
1176 |
24751
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
1177 ## Test escape sequences are expanded even in single-quoted strings |
21317
a4faec57f4c8
maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
1178 %!assert (regexp ("\n", '\n'), 1) |
a4faec57f4c8
maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
1179 %!assert (regexp ("\n", "\n"), 1) |
20290
b6a59cc96bfa
Process backslashes in regexprep replacement strings in Matlab compatible fashion (bug #45407).
Rik <rik@octave.org>
parents:
20232
diff
changeset
|
1180 |
22489
93ea313301f9
test: Add bug ids (<#####>) to BIST tests.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
1181 # Test escape sequences are silently converted |
23573
1b4f4ec53b4a
use new script to tag fixed bugs in tests
John W. Eaton <jwe@octave.org>
parents:
23572
diff
changeset
|
1182 %!test <*45407> |
20290
b6a59cc96bfa
Process backslashes in regexprep replacement strings in Matlab compatible fashion (bug #45407).
Rik <rik@octave.org>
parents:
20232
diff
changeset
|
1183 %! assert (regexprep ('s', 's', 'x\.y'), 'x.y'); |
b6a59cc96bfa
Process backslashes in regexprep replacement strings in Matlab compatible fashion (bug #45407).
Rik <rik@octave.org>
parents:
20232
diff
changeset
|
1184 %! assert (regexprep ('s', '(s)', 'x\$1y'), 'x$1y'); |
b6a59cc96bfa
Process backslashes in regexprep replacement strings in Matlab compatible fashion (bug #45407).
Rik <rik@octave.org>
parents:
20232
diff
changeset
|
1185 %! assert (regexprep ('s', '(s)', 'x\\$1y'), 'x\sy'); |
b6a59cc96bfa
Process backslashes in regexprep replacement strings in Matlab compatible fashion (bug #45407).
Rik <rik@octave.org>
parents:
20232
diff
changeset
|
1186 |
24751
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
1187 ## Test input validation |
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
1188 %!error regexp ('string', 'tri', 'BadArg') |
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
1189 %!error regexp ('string') |
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
1190 |
5582 | 1191 */ |
1192 | |
15039
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14854
diff
changeset
|
1193 DEFUN (regexpi, args, nargout, |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1194 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1195 @deftypefn {} {[@var{s}, @var{e}, @var{te}, @var{m}, @var{t}, @var{nm}, @var{sp}] =} regexpi (@var{str}, @var{pat}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1196 @deftypefnx {} {[@dots{}] =} regexpi (@var{str}, @var{pat}, "@var{opt1}", @dots{}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1197 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1198 Case insensitive regular expression string matching. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1199 |
27537
7dc31256c5e4
Document that regexp* functions need UTF-8 encoded input (bug #35910).
Markus Mützel <markus.muetzel@gmx.de>
parents:
27278
diff
changeset
|
1200 Search for @var{pat} in UTF-8 encoded @var{str} and return the positions and |
7dc31256c5e4
Document that regexp* functions need UTF-8 encoded input (bug #35910).
Markus Mützel <markus.muetzel@gmx.de>
parents:
27278
diff
changeset
|
1201 substrings of any matches, or empty values if there are none. |
28961
d9d028b479ac
doc: Use @code{} within alternate text for @xref,@pxref macros in libinterp/
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1202 @xref{XREFregexp,,@code{regexp}}, for details on the syntax of the search |
d9d028b479ac
doc: Use @code{} within alternate text for @xref,@pxref macros in libinterp/
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1203 pattern. |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1204 @seealso{regexp} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1205 @end deftypefn */) |
5582 | 1206 { |
20821
b169da150702
Eliminate unnecessary uses of nargin.
Rik <rik@octave.org>
parents:
20819
diff
changeset
|
1207 if (args.length () < 2) |
b169da150702
Eliminate unnecessary uses of nargin.
Rik <rik@octave.org>
parents:
20819
diff
changeset
|
1208 print_usage (); |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
1209 |
23576
00e518162fda
maint: Deprecate is_cell and replace with iscell.
Rik <rik@octave.org>
parents:
23573
diff
changeset
|
1210 if (args(0).iscell () || args(1).iscell ()) |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1211 return octcellregexp (args, (nargout > 0 ? nargout : 1), "regexpi", true); |
6361 | 1212 else |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1213 return octregexp (args, nargout, "regexpi", true); |
5582 | 1214 } |
1215 | |
1216 /* | |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1217 ## segfault test |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1218 %!assert (regexpi ("abcde", "."), [1,2,3,4,5]) |
5582 | 1219 |
1220 ## Check that anchoring of pattern works correctly | |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1221 %!assert (regexpi ('abcabc', '^ABC'), 1) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1222 %!assert (regexpi ('abcabc', 'ABC$'), 4) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1223 %!assert (regexpi ('abcabc', '^ABC$'), zeros (1,0)) |
5582 | 1224 |
1225 %!test | |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1226 %! [s, e, te, m, t] = regexpi (' No Match ', 'f(.*)uck'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1227 %! assert (s, zeros (1,0)); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1228 %! assert (e, zeros (1,0)); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1229 %! assert (te, cell (1,0)); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1230 %! assert (m, cell (1,0)); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1231 %! assert (t, cell (1,0)); |
5582 | 1232 |
1233 %!test | |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1234 %! [s, e, te, m, t] = regexpi (' FiRetrUck ', 'f(.*)uck'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1235 %! assert (s, 2); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1236 %! assert (e, 10); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1237 %! assert (te{1}, [3, 7]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1238 %! assert (m{1}, 'FiRetrUck'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1239 %! assert (t{1}{1}, 'iRetr'); |
5582 | 1240 |
1241 %!test | |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1242 %! [s, e, te, m, t] = regexpi (' firetruck ', 'f(.*)uck'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1243 %! assert (s, 2); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1244 %! assert (e, 10); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1245 %! assert (te{1}, [3, 7]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1246 %! assert (m{1}, 'firetruck'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1247 %! assert (t{1}{1}, 'iretr'); |
5582 | 1248 |
1249 %!test | |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1250 %! [s, e, te, m, t] = regexpi ('ShoRt Test String', '\w*r\w*'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1251 %! assert (s, [1, 12]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1252 %! assert (e, [5, 17]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1253 %! assert (size (te), [1, 2]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1254 %! assert (isempty (te{1})); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1255 %! assert (isempty (te{2})); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1256 %! assert (m{1}, 'ShoRt'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1257 %! assert (m{2}, 'String'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1258 %! assert (size (t), [1, 2]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1259 %! assert (isempty (t{1})); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1260 %! assert (isempty (t{2})); |
5582 | 1261 |
1262 %!test | |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1263 %! [s, e, te, m, t] = regexpi ('ShoRt Test String', '\w*r\w*', 'once'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1264 %! assert (s, 1); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1265 %! assert (e, 5); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1266 %! assert (isempty (te)); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1267 %! assert (m, 'ShoRt'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1268 %! assert (isempty (t)); |
5582 | 1269 |
1270 %!test | |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1271 %! [m, te, e, s, t] = regexpi ('ShoRt Test String', '\w*r\w*', 'once', 'match', 'tokenExtents', 'end', 'start', 'tokens'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1272 %! assert (s, 1); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1273 %! assert (e, 5); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1274 %! assert (isempty (te)); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1275 %! assert (m, 'ShoRt'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1276 %! assert (isempty (t)); |
5582 | 1277 |
12462
e4dbfe3019b1
Use PCRE regular expressions throughout Octave.
Rik <octave@nomad.inbox5.com>
parents:
12433
diff
changeset
|
1278 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1279 %! [s, e, te, m, t, nm] = regexpi ('ShoRt Test String', '(?<word1>\w*t)\s*(?<word2>\w*t)'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1280 %! assert (s, 1); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1281 %! assert (e, 10); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1282 %! assert (size (te), [1, 1]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1283 %! assert (te{1}, [1,5; 7,10]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1284 %! assert (m{1}, 'ShoRt Test'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1285 %! assert (size (t), [1, 1]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1286 %! assert (t{1}{1}, 'ShoRt'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1287 %! assert (t{1}{2}, 'Test'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1288 %! assert (size (nm), [1, 1]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1289 %! assert (! isempty (fieldnames (nm))); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1290 %! assert (sort (fieldnames (nm)), {'word1';'word2'}); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1291 %! assert (nm.word1, 'ShoRt'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1292 %! assert (nm.word2, 'Test'); |
5582 | 1293 |
12462
e4dbfe3019b1
Use PCRE regular expressions throughout Octave.
Rik <octave@nomad.inbox5.com>
parents:
12433
diff
changeset
|
1294 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1295 %! [nm, m, te, e, s, t] = regexpi ('ShoRt Test String', '(?<word1>\w*t)\s*(?<word2>\w*t)', 'names', 'match', 'tokenExtents', 'end', 'start', 'tokens'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1296 %! assert (s, 1); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1297 %! assert (e, 10); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1298 %! assert (size (te), [1, 1]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1299 %! assert (te{1}, [1,5; 7,10]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1300 %! assert (m{1}, 'ShoRt Test'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1301 %! assert (size (t), [1, 1]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1302 %! assert (t{1}{1}, 'ShoRt'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1303 %! assert (t{1}{2}, 'Test'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1304 %! assert (size (nm), [1, 1]); |
20955
77f5591878bf
maint: Use '! expr' rather than '!expr' to conform to coding guidelines.
Rik <rik@octave.org>
parents:
20940
diff
changeset
|
1305 %! assert (! isempty (fieldnames (nm))); |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1306 %! assert (sort (fieldnames (nm)), {'word1';'word2'}); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1307 %! assert (nm.word1, 'ShoRt'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1308 %! assert (nm.word2, 'Test'); |
5582 | 1309 |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1310 %!assert (regexpi ("abc\nabc", '.'), [1:7]) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1311 %!assert (regexpi ("abc\nabc", '.', 'dotall'), [1:7]) |
12462
e4dbfe3019b1
Use PCRE regular expressions throughout Octave.
Rik <octave@nomad.inbox5.com>
parents:
12433
diff
changeset
|
1312 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1313 %! assert (regexpi ("abc\nabc", '(?s).'), [1:7]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1314 %! assert (regexpi ("abc\nabc", '.', 'dotexceptnewline'), [1,2,3,5,6,7]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1315 %! assert (regexpi ("abc\nabc", '(?-s).'), [1,2,3,5,6,7]); |
5779 | 1316 |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1317 %!assert (regexpi ("caseCaSe", 'case'), [1, 5]) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1318 %!assert (regexpi ("caseCaSe", 'case', "matchcase"), 1) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1319 %!assert (regexpi ("caseCaSe", 'case', "ignorecase"), [1, 5]) |
12462
e4dbfe3019b1
Use PCRE regular expressions throughout Octave.
Rik <octave@nomad.inbox5.com>
parents:
12433
diff
changeset
|
1320 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1321 %! assert (regexpi ("caseCaSe", '(?-i)case'), 1); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1322 %! assert (regexpi ("caseCaSe", '(?i)case'), [1, 5]); |
5779 | 1323 |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1324 %!assert (regexpi ("abc\nabc", 'C$'), 7) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1325 %!assert (regexpi ("abc\nabc", 'C$', "stringanchors"), 7) |
12462
e4dbfe3019b1
Use PCRE regular expressions throughout Octave.
Rik <octave@nomad.inbox5.com>
parents:
12433
diff
changeset
|
1326 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1327 %! assert (regexpi ("abc\nabc", '(?-m)C$'), 7); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1328 %! assert (regexpi ("abc\nabc", 'C$', "lineanchors"), [3, 7]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1329 %! assert (regexpi ("abc\nabc", '(?m)C$'), [3, 7]); |
5779 | 1330 |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1331 %!assert (regexpi ("this word", 'S w'), 4) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1332 %!assert (regexpi ("this word", 'S w', 'literalspacing'), 4) |
12462
e4dbfe3019b1
Use PCRE regular expressions throughout Octave.
Rik <octave@nomad.inbox5.com>
parents:
12433
diff
changeset
|
1333 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1334 %! assert (regexpi ("this word", '(?-x)S w', 'literalspacing'), 4); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1335 %! assert (regexpi ("this word", 'S w', 'freespacing'), zeros (1,0)); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1336 %! assert (regexpi ("this word", '(?x)S w'), zeros (1,0)); |
5582 | 1337 |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1338 %!error regexpi ('string', 'tri', 'BadArg') |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1339 %!error regexpi ('string') |
6361 | 1340 |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1341 %!assert (regexpi ({'asdfg-dfd';'-dfd-dfd-';'qasfdfdaq'}, '-'), {6;[1,5,9];zeros(1, 0)}) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1342 %!assert (regexpi ({'asdfg-dfd', '-dfd-dfd-', 'qasfdfdaq'}, '-'), {6, [1,5,9], zeros(1,0)}) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1343 %!assert (regexpi ({'asdfg-dfd';'-dfd-dfd-';'qasfdfdaq'}, {'-';'f';'q'}), {6;[3,7];[1,9]}) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1344 %!assert (regexpi ('Strings', {'t', 's'}), {2, [1, 7]}) |
14543
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
1345 |
21317
a4faec57f4c8
maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
1346 %!assert (regexpi ("\n", '\n'), 1) |
a4faec57f4c8
maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
1347 %!assert (regexpi ("\n", "\n"), 1) |
5582 | 1348 */ |
1349 | |
6361 | 1350 static octave_value |
23433
c9fab0bc983e
maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
1351 octregexprep (const octave_value_list& args, const std::string& who) |
5785 | 1352 { |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
1353 int nargin = args.length (); |
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
1354 |
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
1355 // Make sure we have string, pattern, replacement |
5785 | 1356 const std::string buffer = args(0).string_value (); |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
1357 |
14543
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
1358 std::string pattern = args(1).string_value (); |
20558
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
1359 |
22722
e6fac42c8d56
Fix regexp handling of beginning/end word match for double-quoted pattern strings (bug #49451).
Rik <rik@octave.org>
parents:
22599
diff
changeset
|
1360 // Rewrite pattern for PCRE |
e6fac42c8d56
Fix regexp handling of beginning/end word match for double-quoted pattern strings (bug #49451).
Rik <rik@octave.org>
parents:
22599
diff
changeset
|
1361 pattern = do_regexp_ptn_string_escapes (pattern, args(1).is_sq_string ()); |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
1362 |
14543
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
1363 std::string replacement = args(2).string_value (); |
20558
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
1364 |
14543
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
1365 // Matlab compatibility. |
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
1366 if (args(2).is_sq_string ()) |
15541
9db32cabeacf
Fix backslash handling in regexp pattern (Bug #37092)
Rik <rik@octave.org>
parents:
15195
diff
changeset
|
1367 replacement = do_regexp_rep_string_escapes (replacement); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11572
diff
changeset
|
1368 |
5785 | 1369 // Pack options excluding 'tokenize' and various output |
1370 // reordering strings into regexp arg list | |
14024
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
1371 octave_value_list regexpargs (nargin-3, octave_value ()); |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
1372 |
14024
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
1373 int len = 0; |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11572
diff
changeset
|
1374 for (int i = 3; i < nargin; i++) |
5785 | 1375 { |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
1376 const std::string opt = args(i).string_value (); |
5785 | 1377 if (opt != "tokenize" && opt != "start" && opt != "end" |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
1378 && opt != "tokenextents" && opt != "match" && opt != "tokens" |
13310
583940a28bfd
handle "split" option for regexp
John W. Eaton <jwe@octave.org>
parents:
13227
diff
changeset
|
1379 && opt != "names" && opt != "split" && opt != "warnings") |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
1380 { |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
1381 regexpargs(len++) = args(i); |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
1382 } |
5785 | 1383 } |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
1384 regexpargs.resize (len); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11572
diff
changeset
|
1385 |
22333
2758af148ced
move base_list and regexp classes to octave namespace
John W. Eaton <jwe@octave.org>
parents:
22323
diff
changeset
|
1386 octave::regexp::opts options; |
14024
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
1387 bool extra_args = false; |
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
1388 parse_options (options, regexpargs, who, 0, extra_args); |
5785 | 1389 |
22333
2758af148ced
move base_list and regexp classes to octave namespace
John W. Eaton <jwe@octave.org>
parents:
22323
diff
changeset
|
1390 return octave::regexp::replace (pattern, buffer, replacement, options, who); |
6361 | 1391 } |
1392 | |
15039
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14854
diff
changeset
|
1393 DEFUN (regexprep, args, , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1394 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1395 @deftypefn {} {@var{outstr} =} regexprep (@var{string}, @var{pat}, @var{repstr}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1396 @deftypefnx {} {@var{outstr} =} regexprep (@var{string}, @var{pat}, @var{repstr}, "@var{opt1}", @dots{}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1397 Replace occurrences of pattern @var{pat} in @var{string} with @var{repstr}. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1398 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1399 The pattern is a regular expression as documented for @code{regexp}. |
28961
d9d028b479ac
doc: Use @code{} within alternate text for @xref,@pxref macros in libinterp/
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1400 @xref{XREFregexp,,@code{regexp}}. |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1401 |
27537
7dc31256c5e4
Document that regexp* functions need UTF-8 encoded input (bug #35910).
Markus Mützel <markus.muetzel@gmx.de>
parents:
27278
diff
changeset
|
1402 All strings must be UTF-8 encoded. |
7dc31256c5e4
Document that regexp* functions need UTF-8 encoded input (bug #35910).
Markus Mützel <markus.muetzel@gmx.de>
parents:
27278
diff
changeset
|
1403 |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1404 The replacement string may contain @code{$i}, which substitutes for the ith |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1405 set of parentheses in the match string. For example, |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1406 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1407 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1408 regexprep ("Bill Dunn", '(\w+) (\w+)', '$2, $1') |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1409 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1410 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1411 @noindent |
22299
9fc91bb2aec3
doc: grammarcheck documentation for 4.2 release.
Rik <rik@octave.org>
parents:
22197
diff
changeset
|
1412 returns @qcode{"Dunn, Bill"} |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1413 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1414 Options in addition to those of @code{regexp} are |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1415 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1416 @table @samp |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1417 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1418 @item once |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1419 Replace only the first occurrence of @var{pat} in the result. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1420 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1421 @item warnings |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1422 This option is present for compatibility but is ignored. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1423 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1424 @end table |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1425 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1426 Implementation Note: For compatibility with @sc{matlab}, escape sequences |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1427 in @var{pat} (e.g., @qcode{"@xbackslashchar{}n"} => newline) are expanded |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1428 even when @var{pat} has been defined with single quotes. To disable |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1429 expansion use a second backslash before the escape sequence (e.g., |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1430 "@xbackslashchar{}@xbackslashchar{}n") or use the @code{regexptranslate} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1431 function. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1432 @seealso{regexp, regexpi, strrep} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1433 @end deftypefn */) |
6361 | 1434 { |
20821
b169da150702
Eliminate unnecessary uses of nargin.
Rik <rik@octave.org>
parents:
20819
diff
changeset
|
1435 if (args.length () < 3) |
b169da150702
Eliminate unnecessary uses of nargin.
Rik <rik@octave.org>
parents:
20819
diff
changeset
|
1436 print_usage (); |
6361 | 1437 |
20821
b169da150702
Eliminate unnecessary uses of nargin.
Rik <rik@octave.org>
parents:
20819
diff
changeset
|
1438 octave_value_list retval; |
6361 | 1439 |
23576
00e518162fda
maint: Deprecate is_cell and replace with iscell.
Rik <rik@octave.org>
parents:
23573
diff
changeset
|
1440 if (args(0).iscell () || args(1).iscell () || args(2).iscell ()) |
6361 | 1441 { |
20821
b169da150702
Eliminate unnecessary uses of nargin.
Rik <rik@octave.org>
parents:
20819
diff
changeset
|
1442 Cell str, pat, rep; |
6495 | 1443 dim_vector dv0; |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
1444 dim_vector dv1 (1, 1); |
6361 | 1445 |
23576
00e518162fda
maint: Deprecate is_cell and replace with iscell.
Rik <rik@octave.org>
parents:
23573
diff
changeset
|
1446 if (args(0).iscell ()) |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
1447 str = args(0).cell_value (); |
6361 | 1448 else |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
1449 str = Cell (args(0)); |
6361 | 1450 |
23576
00e518162fda
maint: Deprecate is_cell and replace with iscell.
Rik <rik@octave.org>
parents:
23573
diff
changeset
|
1451 if (args(1).iscell ()) |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
1452 pat = args(1).cell_value (); |
6361 | 1453 else |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
1454 pat = Cell (args(1)); |
6361 | 1455 |
23576
00e518162fda
maint: Deprecate is_cell and replace with iscell.
Rik <rik@octave.org>
parents:
23573
diff
changeset
|
1456 if (args(2).iscell ()) |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
1457 rep = args(2).cell_value (); |
6361 | 1458 else |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
1459 rep = Cell (args(2)); |
6361 | 1460 |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
1461 dv0 = str.dims (); |
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
1462 if (pat.numel () != 1) |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
1463 { |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
1464 dv1 = pat.dims (); |
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
1465 if (rep.numel () != 1 && dv1 != rep.dims ()) |
14024
fc9f204faea0
refactor regexp (bug #34440)
John W. Eaton <jwe@octave.org>
parents:
13929
diff
changeset
|
1466 error ("regexprep: inconsistent cell array dimensions"); |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
1467 } |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
1468 else if (rep.numel () != 1) |
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
1469 dv1 = rep.dims (); |
6361 | 1470 |
20558
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
1471 Cell ret (dv0); |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
1472 octave_value_list new_args = args; |
13227
9559417aa965
maint: regexp.cc style fixes
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
1473 |
20558
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
1474 for (octave_idx_type i = 0; i < dv0.numel (); i++) |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
1475 { |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
1476 new_args(0) = str(i); |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
1477 if (pat.numel () == 1) |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
1478 new_args(1) = pat(0); |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
1479 if (rep.numel () == 1) |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
1480 new_args(2) = rep(0); |
6361 | 1481 |
20558
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
1482 for (octave_idx_type j = 0; j < dv1.numel (); j++) |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
1483 { |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
1484 if (pat.numel () != 1) |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
1485 new_args(1) = pat(j); |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
1486 if (rep.numel () != 1) |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
1487 new_args(2) = rep(j); |
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
1488 new_args(0) = octregexprep (new_args, "regexprep"); |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
1489 } |
6361 | 1490 |
20558
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
1491 ret(i) = new_args(0); |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9064
diff
changeset
|
1492 } |
20558
1a0a433c8263
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20290
diff
changeset
|
1493 |
23576
00e518162fda
maint: Deprecate is_cell and replace with iscell.
Rik <rik@octave.org>
parents:
23573
diff
changeset
|
1494 retval = (args(0).iscell () ? ovl (ret) : ovl (ret(0))); |
6361 | 1495 } |
1496 else | |
1497 retval = octregexprep (args, "regexprep"); | |
1498 | |
5785 | 1499 return retval; |
1500 } | |
1501 | |
1502 /* | |
1503 %!test # Replace with empty | |
1504 %! xml = '<!-- This is some XML --> <tag v="hello">some stuff<!-- sample tag--></tag>'; | |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1505 %! t = regexprep (xml, '<[!?][^>]*>', ''); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1506 %! assert (t, ' <tag v="hello">some stuff</tag>'); |
5785 | 1507 |
1508 %!test # Replace with non-empty | |
1509 %! xml = '<!-- This is some XML --> <tag v="hello">some stuff<!-- sample tag--></tag>'; | |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1510 %! t = regexprep (xml, '<[!?][^>]*>', '?'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1511 %! assert (t, '? <tag v="hello">some stuff?</tag>'); |
5785 | 1512 |
1513 %!test # Check that 'tokenize' is ignored | |
1514 %! xml = '<!-- This is some XML --> <tag v="hello">some stuff<!-- sample tag--></tag>'; | |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1515 %! t = regexprep (xml, '<[!?][^>]*>', '', 'tokenize'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1516 %! assert (t, ' <tag v="hello">some stuff</tag>'); |
5785 | 1517 |
11032
c9b0a75b02e8
Make all regexp in Octave compatible with both POSIX and PCRE.
Rik <octave@nomad.inbox5.com>
parents:
11025
diff
changeset
|
1518 ## Test capture replacement |
12462
e4dbfe3019b1
Use PCRE regular expressions throughout Octave.
Rik <octave@nomad.inbox5.com>
parents:
12433
diff
changeset
|
1519 %!test |
7242 | 1520 %! data = "Bob Smith\nDavid Hollerith\nSam Jenkins"; |
1521 %! result = "Smith, Bob\nHollerith, David\nJenkins, Sam"; | |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1522 %! t = regexprep (data, '(?m)^(\w+)\s+(\w+)$', '$2, $1'); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1523 %! assert (t, result); |
5785 | 1524 |
11032
c9b0a75b02e8
Make all regexp in Octave compatible with both POSIX and PCRE.
Rik <octave@nomad.inbox5.com>
parents:
11025
diff
changeset
|
1525 ## Return the original if no match |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1526 %!assert (regexprep ('hello', 'world', 'earth'), 'hello') |
5785 | 1527 |
24751
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
1528 ## Test emptymatch option |
14536
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1529 %!assert (regexprep ('World', '^', 'Hello '), 'World') |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1530 %!assert (regexprep ('World', '^', 'Hello ', 'emptymatch'), 'Hello World') |
6d5c951ec520
Add 'emptymatch', 'noemptymatch' options to regular expressions.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
1531 |
5785 | 1532 ## Test a general replacement |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1533 %!assert (regexprep ("a[b]c{d}e-f=g", "[^A-Za-z0-9_]", "_"), "a_b_c_d_e_f_g") |
5785 | 1534 |
24751
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
1535 ## Make sure replacements work at the beginning and end of string |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1536 %!assert (regexprep ("a[b]c{d}e-f=g", "a", "_"), "_[b]c{d}e-f=g") |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1537 %!assert (regexprep ("a[b]c{d}e-f=g", "g", "_"), "a[b]c{d}e-f=_") |
5785 | 1538 |
24751
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
1539 ## Test options "once" and "ignorecase" |
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
1540 %!assert (regexprep ("a[b]c{d}e-f=g", "[^A-Za-z0-9_]", "_", "once"), |
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
1541 %! "a_b]c{d}e-f=g") |
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
1542 %!assert (regexprep ("a[b]c{d}e-f=g", "[^A-Z0-9_]", "_", "ignorecase"), |
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
1543 %! "a_b_c_d_e_f_g") |
5785 | 1544 |
1545 ## Option combinations | |
24751
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
1546 %!assert (regexprep ("a[b]c{d}e-f=g", "[^A-Z0-9_]", "_", "once", "ignorecase"), |
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
1547 %! "a_b]c{d}e-f=g") |
5785 | 1548 |
1549 ## End conditions on replacement | |
21317
a4faec57f4c8
maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
1550 %!assert (regexprep ("abc", "(b)", ".$1"), "a.bc") |
a4faec57f4c8
maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
1551 %!assert (regexprep ("abc", "(b)", "$1"), "abc") |
a4faec57f4c8
maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
1552 %!assert (regexprep ("abc", "(b)", "$1."), "ab.c") |
a4faec57f4c8
maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
1553 %!assert (regexprep ("abc", "(b)", "$1.."), "ab..c") |
5785 | 1554 |
6361 | 1555 ## Test cell array arguments |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1556 %!assert (regexprep ("abc", {"b","a"}, "?"), "??c") |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1557 %!assert (regexprep ({"abc","cba"}, "b", "?"), {"a?c","c?a"}) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14496
diff
changeset
|
1558 %!assert (regexprep ({"abc","cba"}, {"b","a"}, {"?","!"}), {"!?c","c?!"}) |
6361 | 1559 |
24751
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
1560 ## Nasty lookbehind expression |
21575
bc9aa534bc29
maint: Clean up BIST tests so they don't produce warnings.
Rik <rik@octave.org>
parents:
21547
diff
changeset
|
1561 %!test |
bc9aa534bc29
maint: Clean up BIST tests so they don't produce warnings.
Rik <rik@octave.org>
parents:
21547
diff
changeset
|
1562 %! warning ("off", "Octave:regexp-lookbehind-limit", "local"); |
24751
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
1563 %! assert (regexprep ('x^(-1)+y(-1)+z(-1)=0', '(?<=[a-z]+)\(\-[1-9]*\)', |
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
1564 %! '_minus1'),'x^(-1)+y_minus1+z_minus1=0'); |
14543
e47d929fde8f
process backslash string escapes in regexp pattern and regexprep replacement (bug #35911)
John W. Eaton <jwe@octave.org>
parents:
14536
diff
changeset
|
1565 |
24751
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
1566 ## Verify escape sequences in pattern |
21317
a4faec57f4c8
maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
1567 %!assert (regexprep ("\n", '\n', "X"), "X") |
a4faec57f4c8
maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
1568 %!assert (regexprep ("\n", "\n", "X"), "X") |
24606
4a4a8b2a5bf2
Test for incorrect regexprep on ARM platforms (bug #52810).
Colin Macdonald <cbm@m.fsf.org>
parents:
23816
diff
changeset
|
1569 |
24751
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
1570 ## Verify NULLs in pattern and replacement string |
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
1571 %!assert (regexprep ("A\0A", "\0", ","), "A,A") |
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
1572 %!assert (regexprep ("A\0A", '\0', ","), "A,A") |
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
1573 %!assert (regexprep ("A,A", "A", "B\0B"), "B\0B,B\0B") |
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
1574 %!assert (regexprep ("A,A", "A", 'B\0B'), "B\0B,B\0B") |
6e670c58c6f0
Expand octal sequences in regexprep replacement string for Matlab compatibility.
Rik <rik@octave.org>
parents:
24741
diff
changeset
|
1575 |
24606
4a4a8b2a5bf2
Test for incorrect regexprep on ARM platforms (bug #52810).
Colin Macdonald <cbm@m.fsf.org>
parents:
23816
diff
changeset
|
1576 ## Empty matches were broken on ARM architecture |
4a4a8b2a5bf2
Test for incorrect regexprep on ARM platforms (bug #52810).
Colin Macdonald <cbm@m.fsf.org>
parents:
23816
diff
changeset
|
1577 %!test <*52810> |
4a4a8b2a5bf2
Test for incorrect regexprep on ARM platforms (bug #52810).
Colin Macdonald <cbm@m.fsf.org>
parents:
23816
diff
changeset
|
1578 %! assert (strcmp (regexprep ("\nabc", "^(\t*)(abc)$", "$1$2", "lineanchors"), "\nabc")) |
5785 | 1579 */ |