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