В теории регулярных выражений нет абсолютно ничего, что препятствовало бы их применению к чему-то другому, кроме просто строк символов. Просто большинство реализаций движка регулярных выражений этого не допускают.
Однако, если у вас есть механизм регулярных выражений, который позволяет обрабатывать строку как некодированные 8-битные данные (иногда называемые BINARY
, 8BIT
или ASCII-8BIT
), то вы можете использовать этот механизм для разбирать байт-ориентированные двоичные данные.
Ragel - это компилятор конечного автомата, специально разработанный для анализа двоичных протоколов. Вы пишете свой конечный автомат на высокоуровневом (подобном регулярному выражению) DSL, а затем Ragel компилирует его в целевой язык - Ragel в настоящее время поддерживает C, C ++, Objective-C, D, Java и Ruby.
Большинство функциональных языков программирования имеют мощные средства сопоставления с образцом, встроенные непосредственно в сам язык. эти средства могут использоваться для сопоставления с образцом двоичных данных. Одним из примеров этого является поддержка Эрлангом построения и сопоставления с образцом двоичных структур данных .
OMeta - это язык сопоставления с образцом и преобразования рисунка, который по сути представляет собой расширенный набор регулярных выражений на стероидах. Он поддерживает сопоставление не только строк символов, но и массивов и списков целых и произвольных объектов.