Ответ 1
\x00
Это значение null char.
У меня есть источник текста с нулями в нем, и мне нужно вытащить их вместе с моим шаблоном регулярного выражения. Может ли регулярное выражение соответствовать нулевому символу?
Я только понял, что имел их, когда мой шаблон отказался сопоставляться, и когда я вложил его в Notepad ++, он показал все нулевые символы.
\x00
Это значение null char.
Одной из проблем с совпадением нулевого символа является то, что вам сначала нужно организовать его доставку. Многие языки используют строки с нулевым символом, поэтому ваше совпадение может быть не против всего ввода.
Как выражать это в PCRE,\000 работает и не собирается расцепляться ничем, следующим за ним, равно как и \x {} (но восьмеричная версия, на мой взгляд, легче идентифицировать при сглаживании регулярного выражения).
См. файлы PCRE и найдите Непечатаемые символы для получения полной информации о том, как указать нуль различными способами.
Чтобы уточнить/добавить еще одну деталь к предыдущему ответу: библиотека PCRE принимает шаблон как строку с нулевым завершением "C". (Цитирование документов PCRE: "Шаблон - это строка C, завершаемая двоичным нулем".) Это означает, что шаблон не может содержать буквенный символ NUL - вместо этого он всегда должен быть экранирован с использованием средств, описанных в других ответах. ("В отличие от строки шаблона, объект может содержать бинарные нули. "4. Хотя двоичные нулевые символы поддерживаются в строке темы, они не допускаются в строке шаблона, потому что они передаются как ни- mal C, заканчивается нулем. Эквивалентная последовательность \0 может быть использована в шаблон для представления двоичного нуля." )
Символ NUL является единственным символом в шаблоне PCRE, который должен быть экранирован, а все остальные могут быть буквальными: "Нет ограничений на появление непечатаемых символов, кроме двоичного нуля, что завершает шаблон".
В качестве окончательного сравнительного примечания некоторые другие Perge-совместимые механизмы регулярных выражений допускают литературные NUL в шаблоне, например Python SRE. Например. urlib.parse из Python3 имеет следующую строку: _asciire = re.compile('([\x00-\x7f]+)')
. Обратите внимание на отсутствие "r" для обозначения необработанного литерала - это означает, что здесь происходит несобранение на уровне Python, а модуль re получает символы со значениями 0x00 и 0x7f в шаблоне.