Я работаю над некоторым кодом, который должен сериализовать регулярные выражения Perl, включая любые флаги регулярных выражений. Поддерживается только подмножество флагов, поэтому мне нужно определить, когда неподдерживаемые флаги, такие как /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 -по -char, чтобы найти флаги.
Проблема здесь в том, что строковое определение флагов регулярных выражений изменилось (я думаю, что в Perl 5.14 )от, например,. от (?i-xsm:foo)
до (?^i:foo)
, что затрудняет синтаксический анализ.
Я мог бы проверить версию perl
или просто написать синтаксический анализатор для обработки обоих случаев, но что-то подсказывает мне, что должен быть доступный более совершенный метод самоанализа.