4 символи з косою рисою 2 без
У механізмі регулярного вираження мови TXR порожній клас []
символів не відповідає жодному символу, а отже, і рядку. Він поводиться таким чином, оскільки клас символів вимагає відповідності символів, а коли він порожній, він вказує, що жоден символ не може його задовольнити.
Інший спосіб полягає в інверсному «безліч всіх рядків , включаючи порожні» регулярний вираз , /.*/
використовуючи оператор доповнення: /~.*/
. Доповнення цього набору не містять жодних рядків, і тому нічого не може відповідати.
Це все задокументовано на сторінці людини:
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".
Косої риси не є частиною синтаксису регулярних виразів; вони є лише пунктуацією, яка розмежовує регекси в нотації S-виразу. Свідок:
# 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