2012-05-26 2 views
1

Вопрос из любопытства, есть способ сделать сопоставление образцов на уровне бит уровне? В настоящее время все системы регулярных выражений, которые я видел, работают на байт или символ на основе представления, но я не видел, любой, который позволит вам соответствовать на уровне бит.Регулярные выражения для битовых шаблонов или двоичных данных?

Например, если у меня есть битной поля, как это:

011101100011100110110001 

(! 24 битого) можно проверить, что биты 7,8 & 9 являются картинами 100?

Предпочтительные языковые ответы предпочтительны, но, как я знаю, нигде это не делает, я был бы признателен за любую проницательность.

ПРИМЕЧАНИЕ: Я хотел бы сделать это на произвольное число битов так превращающего в байт (или дополнения к байт размера) и применяя запутанные нормальное регулярное выражение является не то, что я хочу!

Спасибо,

+0

Что вы подразумеваете под битфилдом? На каком языке вы используете? Является ли bitfield специальным типом или просто строкой 0 и 1? –

+0

Лучшим примером было бы найти шаблон '100' в любом месте потока. Вы не хотите или не нуждаетесь в регулярном выражении, чтобы проверить известную фиксированную позицию. – tripleee

+0

@tripleee ok плохой пример ... представьте себе более сложный шаблон в любом месте потока бит. – NWS

ответ

1

Конечно нет теоретического предела, который сделал бы невозможным. Фактически, связанная теория может применяться к любому алфавиту, а примеры часто используют довольно маленькие алфавиты, хотя обычно это не правило, состоящее из символов 0 и 1. Возможно, вы захотите прочитать книгу об вычислительной теории.

+0

Я подозревал, что теория позволила бы это, поэтому я задал вопрос, чтобы увидеть, есть ли применение. – NWS

+0

В качестве базовой линии преобразование битового вектора в строку из них и нулей и применение обычного текстового регулярного выражения звучит как две-три строки Perl. – tripleee

+0

Я считаю это правильным, так как это, вероятно, лучшее решение. – NWS

1

Предполагая, что что вы пытаетесь проверить фактические биты, а не строка из 1 и 0, я не верю, что вы можете сделать это с помощью регулярных выражений сам по себе, но вы можете применить bit mask, чтобы проверить состояние определенных битов. Например, чтобы проверить LMB является 1:

11000100

И

10000000

= 10000000

+0

Да Биты, но небольшая маска была не совсем тем, что я имею в виду (хотя и подразумевается моим бедным примером!). – NWS

+0

@NWS У меня ограниченный опыт работы с регулярным выражением как движок, но из моего опыта я должен был бы сказать, что * нет *, это невозможно. –

+0

И, как сказал Трейти, теория должна это позволить. Только текущие приложения не поддерживают его. – NWS

Смежные вопросы