4 caracteres con barras 2 sin
En el motor de expresiones regulares del lenguaje TXR, una clase de caracteres vacía []
no coincide con ningún carácter y, por lo tanto, sin cadena. Se comporta de esta manera porque la clase de caracteres requiere una coincidencia de caracteres y, cuando está vacía, especifica que ningún carácter puede satisfacerla.
Otra forma es invertir el "conjunto de todas las cadenas que incluyen vacío" expresiones regulares /.*/
usando el operador de complemento: /~.*/
. El complemento de ese conjunto no contiene cadenas, por lo que no puede coincidir con nada.
Todo esto está documentado en la página del 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".
Las barras no son parte de la sintaxis de expresiones regulares per se; son solo signos de puntuación que delimitan expresiones regulares en la notación de expresión S. Testigo:
# 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