Я работаю над некоторым кодом, который должен сериализовать регулярные выражения Perl, включая любые флагов регулярных выражений. Поддерживается только подмножество флагов, поэтому мне нужно обнаружить, когда в объекте regex находятся неподдерживаемые флаги, такие как /u
.
Текущая версия кода делает это:
static void serialize_regex_flags(buffer *buf, SV *sv) {
char flags[] = {0,0,0,0,0,0};
unsigned int i = 0, f = 0;
STRLEN string_length;
char *string = SvPV(sv, string_length);
Затем вручную обрабатывает string
char -by- char, чтобы найти флаги.
Проблема заключается в том, что строгание флагов регулярных выражений изменилось (я думаю, в Perl 5.14), например. (?i-xsm:foo)
до (?^i:foo)
, что делает синтаксический анализ боли.
Я могу проверить версию perl
или просто написать парсер для обработки обоих случаев, но что-то говорит мне, что должен существовать превосходный метод интроспекции.