4 caracteres com barras 2 sem
No mecanismo de expressão regular da linguagem TXR, uma classe de caracteres vazia []
não corresponde a nenhum caractere e, portanto, a nenhuma string. Ele se comporta dessa maneira porque a classe de caracteres requer uma correspondência de caracteres e, quando está vazia, especifica que nenhum personagem pode satisfazê-la.
Outra maneira é inverter o regex "conjunto de todas as strings, incluindo vazio" /.*/
usando o operador complemento:/~.*/
. O complemento desse conjunto não contém seqüências de caracteres e, portanto, não pode corresponder a nada.
Tudo isso está documentado na página do manual:
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".
As barras não fazem parte da sintaxe regex em si; eles são apenas pontuação que delimita expressões regulares na notação de expressão S. Testemunha:
# 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