2013-09-04 3 views
0

Я планировал использовать RegExes для проекта, который позволяет искать шаблоны кода операций в наборе инструкций байткода Java. Мои входы обычно будут длиться от 10 до 65 000 оп.Распознавание образов в конечном массиве чисел

Вот пример шаблона я хотел бы, чтобы соответствовать: 0x1b 0x06 0x7c 0x3c

я иногда нужно, чтобы иметь возможность рассмотреть 2-6 опкоды как же опкодом именно поэтому я использую диапазоны символов регулярных выражений , Вы можете увидеть примеры этого в первой, второй и четвертой группах без захвата в следующем регулярном выражении: (?:0x1[a-d]) (?:0x0[3-8]) 0x7c (?:0x3[b-e])

Я знаю, что должен быть лучший способ сделать это! Какой подход лучше всего подходит для такого типа ввода?

+0

Есть ли причина, по которой вы не просто конвертируете каждый код операции в 'char'? Это займет немного места для хранения, но не так много, и это, вероятно, упростит поиск шаблонов. – Geobits

+1

Альтернативный подход: сопоставьте 0x7c (который должен точно соответствовать) и по нажатию сканирования вперед и назад. BTW: поскольку ваш шаблон ввода не содержит циклов, вы даже можете вручную создать распознаватель с некоторым незначительным битом. – wildplasser

+0

@wildplasser В моем примере я не использовал '+' или '?', Но я хотел бы использовать это или что-то похожее на него. Я могу перевести строки на конечные машины и сделать что-то с этим ... – kstev

ответ

1

Ну, если эти байты были сохранены как символы, я полагаю, вы можете сопоставить их с регулярными выражениями шаблона, как это:

[\x1a-\x1d][\x03-\x08]\x7c[\x3b-\x3e] 

Я не уверен, что это самый разумный подход, хотя.

+0

Я забыл, что вы можете использовать hex для символов. Я бы хотел что-то немного быстрее, но я думаю, что все будет хорошо. – kstev

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