4 Zeichen mit Schrägstrichen 2 ohne
In der Regex-Engine der TXR-Sprache entspricht eine leere Zeichenklasse []
keinem Zeichen und daher keiner Zeichenfolge. Es verhält sich so, weil die Zeichenklasse eine Zeichenübereinstimmung erfordert und wenn sie leer ist, gibt dies an, dass kein Zeichen sie erfüllen kann.
Eine weitere Möglichkeit ist es, die „Menge aller Zeichenkette einschließlich leer“ regex zu invertieren /.*/
mit dem Komplement - Operator: /~.*/
. Das Komplement dieses Sets enthält überhaupt keine Zeichenketten und kann daher nicht mit irgendetwas übereinstimmen.
Dies ist alles in der Manpage dokumentiert:
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".
Die Schrägstriche sind per se nicht Bestandteil der Regex-Syntax. Sie sind nur Satzzeichen, die Regexes in der S-Ausdrucksnotation begrenzen. Zeuge:
# 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