summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--regex.c2
-rw-r--r--tests/015/regex.tl18
-rw-r--r--txr.13
3 files changed, 21 insertions, 2 deletions
diff --git a/regex.c b/regex.c
index aaddec64..9437881e 100644
--- a/regex.c
+++ b/regex.c
@@ -3234,9 +3234,11 @@ static val scan_until_common(val self, val regex, val stream_in,
regex_machine_reset(&regm);
continue;
case REGM_MATCH_DONE:
+ push(ch, &stack);
match = stack;
goto out_match;
case REGM_MATCH:
+ push(ch, &stack);
match = stack;
continue;
case REGM_INCOMPLETE:
diff --git a/tests/015/regex.tl b/tests/015/regex.tl
new file mode 100644
index 00000000..68058eea
--- /dev/null
+++ b/tests/015/regex.tl
@@ -0,0 +1,18 @@
+(load "../common")
+
+(defun rum (str regex : include-match)
+ (with-in-string-stream (s str)
+ (list (read-until-match regex s include-match)
+ (read-until-match regex s include-match))))
+
+(mtest
+ (rum "a-b" #/-/) ("a" "b")
+ (rum "a-b" #/-/ t) ("a-" "b")
+ (rum "a----b" #/-+/) ("a" "b")
+ (rum "a----b" #/-+/ t) ("a----" "b")
+ (rum "a----b" #/-*/) ("a" "b")
+ (rum "a----b" #/-*/ t) ("a----" "b")
+ (rum "abc" #/-/) ("abc" nil)
+ (rum "abc" #/-/ t) ("abc" nil)
+ (rum "a___b___#c" #/_+#/) ("a___b" "c")
+ (rum "a___b___#c" #/_+#/ t) ("a___b___#" "c"))
diff --git a/txr.1 b/txr.1
index 277673c7..128fcebf 100644
--- a/txr.1
+++ b/txr.1
@@ -56676,10 +56676,9 @@ matched by
is included in the returned string. It defaults to
.codn nil .
-The accumulation of characters is terminated by a match on
+The accumulation of characters is terminated by a non-empty match on
.metn regex ,
the end of the stream, or an error.
-
This means that characters are read from the stream and accumulated while the
stream has more characters available, and while its prefix does not match
.metn regex .