Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
TASTE
uPython-mirror
Commits
6cb6947b
Commit
6cb6947b
authored
Mar 04, 2015
by
Damien George
Browse files
extmod/ure: Correctly return None when a group has no match.
See issue #1122.
parent
2a68c2c2
Changes
2
Hide whitespace changes
Inline
Side-by-side
extmod/modure.c
View file @
6cb6947b
...
...
@@ -65,6 +65,10 @@ STATIC mp_obj_t match_group(mp_obj_t self_in, mp_obj_t no_in) {
}
const
char
*
start
=
self
->
caps
[
no
*
2
];
if
(
start
==
NULL
)
{
// no match for this group
return
mp_const_none
;
}
return
mp_obj_new_str
(
start
,
self
->
caps
[
no
*
2
+
1
]
-
start
,
false
);
}
MP_DEFINE_CONST_FUN_OBJ_2
(
match_group_obj
,
match_group
);
...
...
@@ -97,6 +101,7 @@ STATIC mp_obj_t re_exec(bool is_anchored, uint n_args, const mp_obj_t *args) {
subj
.
end
=
subj
.
begin
+
len
;
int
caps_num
=
(
self
->
re
.
sub
+
1
)
*
2
;
mp_obj_match_t
*
match
=
m_new_obj_var
(
mp_obj_match_t
,
char
*
,
caps_num
);
memset
(
match
->
caps
,
0
,
caps_num
*
sizeof
(
char
*
));
int
res
=
re1_5_recursiveloopprog
(
&
self
->
re
,
&
subj
,
match
->
caps
,
caps_num
,
is_anchored
);
if
(
res
==
0
)
{
m_del_var
(
mp_obj_match_t
,
char
*
,
caps_num
,
match
);
...
...
@@ -135,6 +140,7 @@ STATIC mp_obj_t re_split(uint n_args, const mp_obj_t *args) {
mp_obj_t
retval
=
mp_obj_new_list
(
0
,
NULL
);
const
char
**
caps
=
alloca
(
caps_num
*
sizeof
(
char
*
));
while
(
true
)
{
memset
(
caps
,
0
,
caps_num
*
sizeof
(
char
*
));
int
res
=
re1_5_recursiveloopprog
(
&
self
->
re
,
&
subj
,
caps
,
caps_num
,
false
);
// if we didn't have a match, or had an empty match, it's time to stop
...
...
tests/extmod/ure_group.py
View file @
6cb6947b
...
...
@@ -10,7 +10,7 @@ def print_groups(match):
try
:
i
=
0
while
True
:
print
(
m
.
group
(
i
))
print
(
m
atch
.
group
(
i
))
i
+=
1
except
IndexError
:
pass
...
...
@@ -20,3 +20,9 @@ print_groups(m)
m
=
re
.
match
(
r
'([0-9]*)(([a-z]*)([0-9]*))'
,
'1234hello567'
)
print_groups
(
m
)
# optional group that matches
print_groups
(
re
.
match
(
r
'(a)?b(c)'
,
'abc'
))
# optional group that doesn't match
print_groups
(
re
.
match
(
r
'(a)?b(c)'
,
'bc'
))
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment