4 caractères avec barres obliques 2 sans
Dans le moteur de regex du langage TXR, une classe de caractères vide []
ne correspond à aucun caractère, et donc aucune chaîne. Il se comporte de cette manière car la classe de caractères nécessite une correspondance de caractère et, lorsqu'elle est vide, elle spécifie qu'aucun caractère ne peut la satisfaire.
Une autre façon est d'inverser le « ensemble de toutes les chaînes , y compris vide » regex en /.*/
utilisant l'opérateur complément: /~.*/
. Le complément de cet ensemble ne contient aucune chaîne et ne peut donc rien correspondre.
Tout cela est documenté dans la page de manuel:
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".
Les barres obliques ne font pas partie de la syntaxe regex en soi; ce ne sont que des ponctuations qui délimitent les expressions rationnelles dans la notation S-expression. Témoin:
# 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