Чтобы уточнить / добавить еще одну деталь к предыдущему ответу: библиотека PCRE принимает шаблон в виде строки с C-нулевым символом в конце. (Цитируя PCRE docs: «Шаблон - это строка C, оканчивающаяся двоичным нулем».) Это означает, что шаблон не может содержать буквенный символ NUL - вместо этого его всегда нужно экранировать, используя средства, описанные в других ответах. («В отличие от строки шаблона, субъект может содержать
двоичные нули. "" 4. Хотя двоичные нулевые символы поддерживаются в строке темы,
они не допускаются в строке шаблона, потому что она передается как нормальная
mal C строка, оканчивающаяся на ноль. Экранирующая последовательность \ 0 может использоваться в
шаблон для представления двоичного нуля. ")
NUL-символ является единственным символом в шаблоне PCRE, который должен быть экранирован, все остальные могут быть буквальными: «Нет ограничений на
появление непечатных символов, кроме двоичного нуля, который
завершает шаблон ".
В качестве заключительного сравнительного замечания, некоторые другие Perl-совместимые движки регулярных выражений допускают буквенные NUL в шаблоне, например, SRE Python. Например. urlib.parse из Python3 имеет следующую строку: _asciire = re.compile('([\x00-\x7f]+)')
. Обратите внимание на отсутствие «r» для обозначения необработанного литерала - это означает, что эскейпинг здесь происходит на уровне Python, и модуль re получает в шаблоне символы со значениями 0x00 и 0x7f.