4 Repetition
Repetition allows for a single expression to match more than once, or not at all. There are multiple ways in which repetition may be indicated, using explicit procedures, using the #:repeat argument on group procedures, or the more specific arguments to the rx/repeat procedure. These options are compared in the following table.
rx/... |
| #:repeat |
| rx/repeat |
rx/optional |
| ’optional |
| #:lower 0 #:upper 1 |
rx/zero-or-more |
| ’zero-or-more |
| #:lower 0 #:upper #f |
rx/one-or-more |
| ’one-or-more |
| #:lower 1 #:upper #f |
N/A |
| ’one |
| #:lower 1 #:upper 1 |
> (rx/optional "maybe") "maybe?"
> (rx/? "maybe") "maybe?"
procedure
(rx/zero-or-more expr) → string?
expr : string?
procedure
expr : string?
> (rx/zero-or-more "maybe") "maybe*"
> (rx/* "maybe") "maybe*"
procedure
(rx/one-or-more expr) → string?
expr : string?
procedure
expr : string?
> (rx/one-or-more "maybe") "maybe+"
> (rx/+ "maybe") "maybe+"
procedure
expr : string? lower : (or/c exact-nonnegative-integer? #f) = #f upper : (or/c exact-nonnegative-integer? #f) = #f
> (rx/repeat "maybe" #:lower 1) "maybe{1,}"
> (rx/repeat "maybe" #:upper 1) "maybe{,1}"
> (rx/repeat "maybe" #:lower 1 #:upper 3) "maybe{1,3}"
> (rx/repeat "maybe" #:lower 3 #:upper 1) upper: contract violation
expected: >= 3
given: 1
> (rx/repeat "maybe") upper: contract violation
expected: or/c #f #f
given: '(#f #f)
procedure
(rx/repeat-safe? expr) → boolean?
expr : string?
> (rx/repeat-safe? #\a) #t
> (rx/repeat-safe? "(abc)") #t
> (rx/repeat-safe? "[abc]") #t
> (rx/repeat-safe? "maybe") #f
procedure
(rx/repeat-safely expr [ #:lower lower #:upper upper]) → string? expr : string? lower : exact-nonnegative-integer? = 0 upper : (or/c exact-nonnegative-integer? #f) = #f
> (rx/repeat-safely #\a #:lower 1 #:upper 3) "a{1,3}"
> (rx/repeat-safely "(abc)" #:lower 1 #:upper 3) "(abc){1,3}"
> (rx/repeat-safely "[abc]" #:lower 1 #:upper 3) "[abc]{1,3}"
> (rx/repeat-safely "maybe" #:lower 1 #:upper 3) "(?:maybe){1,3}"