4 znaki z ukośnikami 2 bez
W silniku wyrażeń regularnych języka TXR pusta klasa []
znaków nie pasuje do żadnego znaku, a zatem nie ma łańcucha. Zachowuje się w ten sposób, ponieważ klasa znaków wymaga dopasowania znaku, a gdy jest pusta, oznacza, że żadna postać nie może go spełnić.
Innym sposobem jest odwrócenie „zbiór wszystkich ciągów w tym pustym” regex /.*/
przy użyciu operatora dopełniacza: /~.*/
. Uzupełnienie tego zestawu nie zawiera żadnych ciągów, a zatem nie może dopasować niczego.
Wszystko to jest udokumentowane na stronie man:
nomatch
The nomatch regular expression represents the empty set: it
matches no strings at all, not even the empty string. There is
no dedicated syntax to directly express nomatch in the regex
language. However, the empty character class [] is equivalent
to nomatch, and may be considered to be a notation for it. Other
representations of nomatch are possible: for instance, the regex
~.* which is the complement of the regex that denotes the set of
all possible strings, and thus denotes the empty set. A nomatch
has uses; for instance, it can be used to temporarily "comment
out" regular expressions. The regex ([]abc|xyz) is equivalent to
(xyz), since the []abc branch cannot match anything. Using [] to
"block" a subexpression allows you to leave it in place, then
enable it later by removing the "block".
Ukośniki nie są częścią składni wyrażenia regularnego per se; są tylko interpunkcją, która ogranicza wyrażenia regularne w notacji wyrażenia S. Świadek:
# match line of input with x variable, and then parse that as a regex
#
$ txr -c '@x
@(do (print (regex-parse x)) (put-char #\newline))' -
ab.*c <- input from tty: no slashes.
(compound #\a #\b (0+ wild) #\c) <- output: AST of regex