The regular-expressions Library¶
Overview¶
The regular-expressions library exports the
regular-expressions module, which contains functions that compile
and search for regular expressions. The module has the same semantics
as Perl (version 4) unless otherwise noted.
A regular expression that is grammatically correct may still be
illegal if it contains an infinitely quantified sub-regex that matches
the empty string. That is, if R is a regex that can match the empty
string, then any regex containing R*, R+, and R{n,} is illegal. In
this case, the regular-expressions library will signal an
<invalid-regex> error when the regex is parsed.
Quick Start¶
The most common use of regular expressions is probably to perform a
search and figure out what text matched and/or where it occurred in a
string. You need to use regular-expressions; in both your library
and your module, and then…
define constant $re :: <regex> = compile-regex("^abc(.+)123$");
let match :: false-or(<regex-match>) = regex-search($re, "abcdef123");
// match is #f if search failed.
if (match)
let text = match-group(match, 1);
// text = "def"
let (text, start, _end) = match-group(match, 1);
// text = "def", start = 3, _end = 6
match-group(match, 2) => error: <invalid-match-group>
// group 0 is the entire match
...
end;
compile-regex("*") => error: <invalid-regex>
Reference¶
- <regex> Sealed Class¶
A compiled regular expression object. These should only be created via
compile-regex.
- <regex-error> Sealed Class¶
The superclass of all regular expression-related errors.
- Superclasses:
<format-string-condition>,<error>
- <invalid-regex> Sealed Class¶
Signalled by
compile-regexwhen the given regular expression cannot be compiled.- Superclasses:
- Init-Keywords:
pattern
- regex-error-pattern Sealed Generic function¶
Return the pattern that caused an
<invalid-regex>error.- Signature:
regex-error-pattern error => pattern
- Parameters:
error – An
<invalid-regex>.
- Values:
pattern – A
<string>.
- <invalid-match-group> Sealed Class¶
Signalled when an invalid group identifier is passed to
match-group.- Superclasses:
- <regex-match> Sealed Class¶
Stores the match groups and other information about a specific regex search result.
- Superclasses:
- Init-Keywords:
regular-expression
- compile-regex Sealed Generic function¶
Compile a string into a
<regex>.- Signature:
compile-regex pattern #key case-sensitive verbose multi-line dot-matches-all use-cache => regex
- Parameters:
pattern – A
<string>.case-sensitive (#key) – A
<boolean>, default#t.verbose (#key) – A
<boolean>, default#f.multi-line (#key) – A
<boolean>, default#f.dot-matches-all (#key) – A
<boolean>, default#f.use-cache (#key) – A
<boolean>, default#t. If true, the resulting regular expression will be cached and re-used the next time the same string is compiled.
- Values:
regex – A
<regex>.
- Conditions:
<invalid-regex>is signalled if pattern can’t be compiled.
- regex-position Sealed Generic function¶
Find the position of pattern in text.
- Signature:
regex-position pattern text #key start end case-sensitive => regex-start, #rest marks
- Parameters:
- Values:
regex-start – An instance of
false-or(<integer>).#rest marks – An instance of
<object>.
A match will only be found if it fits entirely within the range specified by start and end.
If the regular expression is not found, return #f, otherwise return a variable number of indices marking the start and end of groups.
This is a low-level API. Use
regex-searchif you want to get a<regex-match>object back.
- regex-replace Sealed Generic function¶
Replace occurrences of pattern within big with replacement.
- Signature:
regex-replace big pattern replacement #key start end count case-sensitive => new-string
- Parameters:
big – The
<string>within which to search.pattern – The
<regex>to search for.replacement – The
<string>to replace pattern with.start (#key) – An
<integer>, default0. The index in big at which to start searching.end (#key) – An
<integer>, default*big*.size. The index at which to end the search.case-sensitive (#key) – A
<boolean>, default#t.count (#key) – An instance of
false-or(<integer>), default#f. The number of matches to replace.#fmeans to replace all.
- Values:
new-string – An instance of
<string>.
A match will only be found if it fits entirely within the range specified by start and end.
- regex-search Sealed Generic function¶
Search for a pattern within text.
- Signature:
regex-search pattern text #key anchored start end case-sensitive => match
- Parameters:
pattern – The
<regex>to search for.text – The
<string>in which to search.anchored (#key) – A
<boolean>, default#f. Whether or not the search should be anchored at the start position. This is useful because “^…” will only match at the beginning of a string, or after \n if the regex was compiled with multi-line = #t.start (#key) – An
<integer>, default0. The index in text at which to start searching.end (#key) – An
<integer>, default*text*.size. The index at which to end the search.case-sensitive (#key) – A
<boolean>, default#t.
- Values:
match – An instance of
false-or(<regex-match>).#fis returned if no match was found.
A match will only be found if it fits entirely within the range specified by start and end.
- regex-search-strings Sealed Generic function¶
Find all matches for a regular expression within a string.
- Signature:
regex-search-strings pattern text #key anchored start end case-sensitive => #rest strings
- Parameters:
pattern – An instance of
<regex>.text – An instance of
<string>.anchored (#key) – An instance of
<boolean>.start (#key) – An
<integer>, default0. The index in text at which to start searching.end (#key) – An
<integer>, default*text*.size. The index at which to end the search.case-sensitive (#key) – A
<boolean>, default#t.
- Values:
#rest strings – An instance of
<object>.
A match will only be found if it fits entirely within the range specified by start and end.
- match-group Sealed Generic function¶
Return information about a specific match group in a
<regex-match>.- Signature:
match-group match group => text start-index end-index
- Parameters:
match – An instance of
<regex-match>.
- Values:
text – An instance of
false-or(<string>).start-index – An instance of
false-or(<integer>).end-index – An instance of
false-or(<integer>).
- Conditions:
<invalid-match-group>is signalled ifgroupdoes not name a valid group.
The requested group may be an
<integer>to access groups by number, or a<string>to access groups by name. Accessing groups by name only works if they were given names in the compiled regular expression via the(?<foo>...)syntax.Group 0 is always the entire regular expression match.
It is possible for the group identifier to be valid and for
#fto be returned. This can happen, for example, if the group was in the part of an|(or) expression that didn’t match.